auto_ptr (shared_ptr भी) उनके उपयोग को यथासंभव पारदर्शी बनाने का प्रयास करें; आदर्श रूप में, आप एक अंतर बताने में सक्षम नहीं होना चाहिए कि क्या आप किसी ऑब्जेक्ट में auto_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 स्पष्ट रूप से सेशन को लागू नहीं करता है के रूप में -> *():
void (MyClass::*memfun)() = &MyClass::foo;
(p->*memfun)(); // OK
(ap->*memfun)(); // Error op->*() missing
(ap.get()->*memfun)(); // OK
auto_ptr में op -> *() के लिए कोई समर्थन क्यों नहीं है और इसे कैसे कार्यान्वित किया जाएगा (मैंने कुछ समय के लिए प्रयोग किया है, लेकिन अंततः छोड़ दिया है)।
यह एक बहुत अच्छा सवाल है; सामान्य स्मार्ट पॉइंटर्स में से कोई भी '-> *' का समर्थन नहीं करता है। आपके उदाहरणों में, '((* एपी)। * Memfun)()' भी मान्य है। –
क्यों न सिर्फ .get() का उपयोग करें? (Ap.get() -> * memfun)(); – Puppy