सबसे पहले, यदि आप एक अद्वितीय सरणी की जरूरत है, यह
std::unique_ptr<int[]> ptr;
// ^^^^^
यह स्मार्ट सूचक सही ढंग से delete[]
उपयोग करने के लिए सूचक पुनःआवंटन देती है, और operator[]
को परिभाषित करता है एक सामान्य सरणी नकल करने के लिए बनाते हैं।
फिर, operator=
केवल अद्वितीय संकेत के rvalue संदर्भ और कच्चे नहीं संकेत के लिए परिभाषित किया गया है, और एक कच्चे सूचक परोक्ष आकस्मिक काम है कि विशिष्टता टूट जाता है से बचने के लिए एक स्मार्ट सूचक में परिवर्तित नहीं किया जा सकता है। इसलिए एक कच्चा सूचक सीधे इसे सौंपा नहीं जा सकता है। सही दृष्टिकोण निर्माता के लिए रख दिया जाता है:
std::unique_ptr<int[]> ptr (new int[3]);
// ^^^^^^^^^^^^
या .reset
समारोह का उपयोग करें:
ptr.reset(new int[3]);
// ^^^^^^^ ^
या स्पष्ट रूप से एक अनूठा सूचक के लिए कच्चे सूचक परिवर्तित:
ptr = std::unique_ptr<int[]>(new int[3]);
// ^^^^^^^^^^^^^^^^^^^^^^^ ^
आप तो C++ 14 का उपयोग कर सकते हैं, new
का उपयोग करने पर
0 का उपयोग कर सकते हैं
कारण यह है कि 'ऑपरेटर =' 'int *' * स्वीकार नहीं करता है और * 'int *' लेने वाले कन्स्ट्रक्टर को 'स्पष्ट' चिह्नित किया जाता है (दोनों 'std :: unique_ptr दोनों के लिए 'और' std :: unique_ptr ')। 'ऑपरेटर = 'एक चाल असाइनमेंट ऑपरेटर होने के नाते और एक कॉपी असाइनमेंट ऑपरेटर के पास इसके साथ कुछ लेना देना नहीं है। –
@LucDanton: ठीक है। इसे शामिल करने के लिए अपडेट किया गया। – kennytm