का उपयोग कर डबल (द्वि-आयामी) सरणी मेरे पास पॉइंटर से पॉइंटर द्वारा आवंटित एक डबल सरणी है।std :: unique_ptr
// pointer to pointer
int **x = new int *[5]; // allocation
for (i=0; i<5; i++){
x[i] = new int[2];
}
for (i=0; i<5; i++){ // assignment
for (j=0; j<2; j++){
x[i][j] = i+j;
}
}
for (i=0; i<5; i++) // deallocation
delete x[i];
delete x;
मैं unique_ptr
का उपयोग कर यह करने के लिए कोशिश कर रहा हूँ:
std::unique_ptr<std::unique_ptr<int>[]> a(new std::unique_ptr<int>[5]);
for (i=0; i<5; i++)
a[i] = new int[2];
लेकिन वह no operator = matches these operands
कह एक त्रुटि हो रही है। मैं यहाँ क्या गलत कर रहा हूँ?
आपके इनपुट के लिए धन्यवाद। जिस तरह से मैं unique_ptr को समझता हूं वह यह सुनिश्चित करता है कि यह उदाहरण केवल 1 संदर्भ में इंगित करता है। तो एक मैट्रिक्स बनाने के लिए unique_ptr को इंगित करने के लिए unique_ptr का उपयोग करना अद्वितीय_ptr का उपयोग करने के लिए ठीक होना चाहिए, यह देखते हुए कि उदाहरण के लिए कोई और संदर्भ नहीं होगा। इसके अलावा, मुझे अंतिम वाक्य के पीछे कारण समझ में नहीं आता है। धन्यवाद। – Evan
किसी भी आरएआईआई कक्षा को वही अनूठी गारंटी प्रदान करनी चाहिए। अधिकांश सी ++ कक्षाएं आरएआईआई हैं। तो आपको नौकरी के लिए सही उपकरण का उपयोग करना चाहिए। वेक्टर और सरणी को unique_ptr को यहां प्राथमिकता दी जानी चाहिए। –
अद्वितीय ptrs का कारण अधिकतर गतिशील आवंटित एकल ऑब्जेक्ट्स को पकड़ने के लिए होता है। मैं एक array_ptr में एक सरणी को स्टोर करने के कारण के बारे में तुरंत सोच नहीं सकता। –