मैं एक वर्ग है कि एक सार्वजनिक विधि के अंदर एक वस्तु बनाता है। वस्तु निजी है और कक्षा के उपयोगकर्ताओं के लिए दृश्यमान नहीं है। इस विधि तो एक ही कक्षा के अंदर अन्य निजी तरीकों कॉल करता है और एक पैरामीटर के रूप में बनाया वस्तु पारित:एक क्लास के भीतर तर्क के रूप में एक स्मार्ट सूचक पासिंग: scoped_ptr या shared_ptr?
class Foo {
...
};
class A {
private:
typedef scoped_ptr<Foo> FooPtr;
void privateMethod1(FooPtr fooObj);
public:
void showSomethingOnTheScreen() {
FooPtr fooObj(new Foo);
privateMethod1(fooObj);
};
};
मेरा मानना है कि इस मामले में सही स्मार्ट सूचक एक scoped_ptr होगा, हालांकि, मैं नहीं कर सकता इस वजह scoped_ptr वर्ग गैर copyable अगर इस तरह से इस्तेमाल किया है, इसलिए मैं इस तरह के तरीकों बनाना चाहिए:
void privateMethod1(FooPtr& fooObj);
privateMethod1 वस्तु की दुकान नहीं है, न तो इसके बारे में संदर्भ रहता है। बस वर्ग फू से डेटा प्राप्त करता है।
सही तरीका शायद सब पर एक स्मार्ट सूचक का उपयोग कर किया जाएगा नहीं और स्टैक में वस्तु का आवंटन, लेकिन यह संभव है क्योंकि यह एक पुस्तकालय है कि ढेर पर वस्तुओं की अनुमति नहीं है का उपयोग करता है नहीं है, वे ढेर पर होना चाहिए ।
सब के बाद, मैं अभी भी scoped_ptr के वास्तविक उपयोग के बारे में संदेह में हूँ।
मैं पुस्तकालय के बारे में उत्सुक हूं कि 'स्टैक पर वस्तुओं की अनुमति नहीं देता है'। क्या लाइब्रेरी के अंदर एक कारखाने के साथ ढेर पर आवंटित वस्तुएं हैं? क्या लाइब्रेरी पॉइंटर का स्वामित्व लेती है और इसे हटा देती है?आवंटित ऑब्जेक्ट्स का उपयोग क्यों नहीं कर सकते हैं इसके कारण क्या हैं? –