【发布时间】:2018-05-16 04:54:54
【问题描述】:
unique_ptr<int> ptr1(new int {});
unique_ptr<int[]> ptr2(new int[5] {});
单维和一维数组可以像上面那样声明。如何将二维或更多数组声明为智能指针?
const size_t idx = 5;
// 2D
int** ptr3 = new int*[idx]{};
for (size_t i = 0; i < idx; i++)
{
ptr3[i] = new int[idx]{};
}
for (size_t i = 0; i < idx; i++)
{
delete[] ptr3[i];
}
delete[] ptr3;
// 3D
int*** ptr4 = new int**[idx]{};
for (size_t i = 0; i < idx; i++)
{
ptr4[i] = new int*[idx]{};
for (size_t j = 0; j < idx; j++)
{
ptr4[i][j] = new int[idx]{};
}
}
... skip ...
-----> smart pointer version?
【问题讨论】:
-
不要那样做。使用容器。也许找到一个实现一些
Matrix模板容器的库(或实现它)。请注意,C++ 没有二维数组(而是数组的数组)。然后使用一个智能指针指向一些Matrix,或者(如果需要)一个Matrix的智能指针。 -
vector<vector<int>>有什么问题? -
我只是对上述情况下的智能指针语法感到好奇。反正这种方式不好。
标签: c++ arrays smart-pointers