auto_ptr (shared_ptr también) intente que su uso sea lo más transparente posible; es decir, idealmente, no debería ser capaz de diferenciar si está utilizando un auto_ptr o un puntero real a un objeto. Considere:¿Por qué auto_ptr no admite op -> *()
class MyClass
{
public:
void foo() { }
};
MyClass* p = new MyClass;
auto_ptr<MyClass> ap(new MyClassp);
p->foo(); // No notational difference in using real
ap->foo(); // pointers and auto_ptrs
Cuando intenta invocar una función miembro a través de un puntero a miembro-, hay una diferencia, como auto_ptr obviamente no implementa op -> *():
void (MyClass::*memfun)() = &MyClass::foo;
(p->*memfun)(); // OK
(ap->*memfun)(); // Error op->*() missing
(ap.get()->*memfun)(); // OK
¿Por qué no hay soporte para op -> *() en auto_ptr y cómo se implementaría (he experimentado durante un tiempo, pero finalmente me rendí).
Esta es una muy buena pregunta; ninguno de los punteros inteligentes usuales admiten '-> *'. En sus ejemplos, '((* ap). * Memfun)()' también es válido. –
¿Por qué no usar simplemente .get()? (ap.get() -> * memfun)(); – Puppy