auto_ptr (shared_ptr) tenta di renderlo il più trasparente possibile; idealmente, non dovresti essere in grado di dire una differenza se stai usando un auto_ptr o un vero puntatore a un oggetto. Considerate:Perché il supporto automatico_ptr 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
Quando si tenta di richiamare una funzione membro attraverso un membro puntatore-a-, c'è una differenza, come auto_ptr ovviamente non implementa op -> *():
void (MyClass::*memfun)() = &MyClass::foo;
(p->*memfun)(); // OK
(ap->*memfun)(); // Error op->*() missing
(ap.get()->*memfun)(); // OK
Perché non c'è il supporto per op -> *() in auto_ptr e come lo implementeremo (ho sperimentato per un po 'di tempo, ma alla fine ho rinunciato).
Questa è una domanda molto buona; nessuno dei soliti puntatori intelligenti supporta '-> *'. Nei tuoi esempi, '((* ap). * Memfun)()' è anche valido. –
Perché non usare semplicemente .get()? (Ap.get() -> * memfun)(); – Puppy