我有一個由指向指針的指針分配的double數組。使用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來創建一個矩陣應該可以使用unique_ptr,因爲不會有對該實例的另一個引用。另外,我不明白最後一句話背後的原因。謝謝。 – Evan 2012-03-21 14:15:02
任何RAII類應提供相同的獨特保證。大多數C++類都是RAII。所以你應該使用正確的工具來完成這項工作。 vector和array應該優先於unique_ptr。 – 2012-03-21 15:14:04
唯一ptrs的原因主要是保存動態分配的單個對象。我不能馬上想到在unique_ptr中存儲數組的原因。 – 2012-03-21 15:16:16