मुझे पता है कि std::shared_ptr के साथ ऐसा करना नासमझी है। लेकिन std::unique_ptr के बारे में क्या? उदा. :

class A {
 public:
  void do_something() { };
};

std::vector<std::unique_ptr<A> > uq_ptrs_;
auto p = new A();
uq_ptrs_.push_back(std::unique_ptr<A>(p));
p->do_something();
1
duong_dajgja 2 जिंदा 2018, 10:19
का संभावित डुप्लिकेट
 – 
Lanting
2 जिंदा 2018, 12:42

1 उत्तर

सबसे बढ़िया उत्तर

जब तक आप std::unique_ptr (या std::shared_ptr!) ऑब्जेक्ट बनाने के बाद मैन्युअल रूप से delete ऑब्जेक्ट नहीं करते हैं तो यह ठीक है।

एक बार जब आपने std::unique_ptr (या std::shared_ptr) को इसका स्वामित्व लेने के लिए कहा, तो आपको सूचक p को भी संदर्भित करने से बचना चाहिए। इसके बजाय स्मार्ट पॉइंटर ऑब्जेक्ट का उपयोग करें।

4
Some programmer dude 2 जिंदा 2018, 10:23
मैंने उदाहरण में कुछ और पंक्तियाँ जोड़ीं। आपकी नई जोड़ी गई टिप्पणी के अनुसार, p->do_something(); नहीं होना चाहिए?
 – 
duong_dajgja
2 जिंदा 2018, 10:28
जब तक std::unique_ptr ऑब्जेक्ट अभी भी मौजूद है, तब तक आप कच्चे पॉइंटर का उपयोग कर सकते हैं जैसे आप करते हैं। हालांकि, मैं इसके खिलाफ दृढ़ता से अनुशंसा करता हूं। मैं आपको यह भी दृढ़ता से अनुशंसा करता हूं कि आप एक कच्चे गैर-स्वामित्व सूचक के साथ ऐसा न करें करें कि आप बाद में स्वामित्व को std::unique_ptr में स्थानांतरित कर देते हैं। इसके बजाय एक std::unique_ptr से शुरू करें। आप जो कर रहे हैं वह यह कह रहा है कि p द्वारा इंगित की गई वस्तु स्वामित्व नई std::unique_ptr वस्तु के पास है।
 – 
Some programmer dude
2 जिंदा 2018, 10:34