auto_ptr (shared_ptr) cố gắng sử dụng chúng càng rõ ràng càng tốt; đó là, lý tưởng, bạn không nên có thể nói một sự khác biệt cho dù bạn đang sử dụng một auto_ptr hoặc một con trỏ thực sự cho một đối tượng. Xem xét:Tại sao auto_ptr không hỗ trợ 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
Khi bạn cố gắng để gọi một hàm thành viên thông qua một thành viên con trỏ-to-, có một sự khác biệt, như auto_ptr rõ ràng là không thực hiện op -> *():
void (MyClass::*memfun)() = &MyClass::foo;
(p->*memfun)(); // OK
(ap->*memfun)(); // Error op->*() missing
(ap.get()->*memfun)(); // OK
Tại sao không có hỗ trợ cho op -> *() trong auto_ptr và làm thế nào sẽ thực hiện nó (Tôi đã thử nghiệm một thời gian, nhưng cuối cùng đã bỏ).
Đây là một câu hỏi rất hay; không có con trỏ thông minh nào hỗ trợ '-> *'. Trong ví dụ của bạn, '((* ap). * Memfun)()' cũng hợp lệ. –
Tại sao không chỉ sử dụng .get()? (ap.get() -> * memfun)(); – Puppy