auto_ptr(以及shared_ptr)尽量使它们的使用尽可能透明;也就是说,理想情况下,您应该无法区分您使用的是 auto_ptr 还是指向对象的真实指针。考虑:
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
当您尝试通过指向成员的指针调用成员函数时,会有所不同,因为 auto_ptr 显然没有实现 op->*():
void (MyClass::*memfun)() = &MyClass::foo;
(p->*memfun)(); // OK
(ap->*memfun)(); // Error op->*() missing
(ap.get()->*memfun)(); // OK
为什么 auto_ptr 中不支持 op->*() 以及如何实现它(我已经尝试了一段时间,但最终放弃了)。