सामान्य स्थिति को देखते हुए जहां एक स्वामित्व वाली वस्तु का जीवन अपने मालिक से जुड़ा हुआ है, मैं एक अद्वितीय सूचक का उपयोग 2 तरीकों में से एक कर सकता हूं। ।क्या मुझे एक unique_ptr असाइन या रीसेट करना चाहिए?
यह सौंपा जा सकता है:
class owner
{
std::unique_ptr<someObject> owned;
public:
owner()
{
owned=std::unique_ptr<someObject>(new someObject());
}
};
रीसेट करने की विधि का उपयोग किया जा सकता है:
class owner
{
std::unique_ptr<someObject> owned;
public:
owner()
{
owned.reset(new someObject());
}
};
सबसे अच्छा अभ्यास के हितों में, मैं एक दूसरे के ऊपर प्रपत्र को प्राथमिकता देनी चाहिए?
संपादित करें: क्षमा करें दोस्तों। मैंने इसे सरल बना दिया। ढेर आवंटन प्रारंभिक विधि में होता है, न कि सीटीआर में। इसलिए, मैं प्रारंभिक सूची का उपयोग नहीं कर सकता।
owner() : owned(new someObject())
{}
अलावा कि मैं reset
पसंद करते हैं आप एक बेकार मध्यवर्ती नहीं बनाते:
मुझे पता है कि यह देर हो चुकी है, लेकिन सिर्फ भविष्य के पाठकों के लिए। स्कॉट मेयर्स के अनुसार उनकी पुस्तक इफेक्टिव मॉडर्न सी ++ में, std :: make_unique बेहतर है, क्योंकि यह अपवाद सुरक्षा प्रदान करता है: मालिक = std :: make_unique ()। समस्या यह है कि std :: make_unique सी ++ 14 (सी ++ 11 नहीं) का हिस्सा है, लेकिन यहां आप [यहां] (https://isocpp.org/files/papers/N3656.txt) ढूंढ सकते हैं अच्छा कार्यान्वयन कि आप कॉपी-पेस्ट कर सकते हैं। –