【发布时间】:2013-03-07 11:26:45
【问题描述】:
我需要动态分配一个二维智能指针数组,但它的语法让我感到困惑。我需要它是动态的:
std::unique_ptr<someClass> myArray[size1][size2];
所以据我了解,我创建了一个指向类型指针的指针:
someClass** myArray; //actaully the type is std::unique_ptr<someClass> but I'll just keep it simple
然后分配它我做:
myArray* = new someClass*[size1];
for(int i = 0; i < size1; i++)
myArray[i] = new someClass[size2];
但这并没有使用智能指针,这意味着我以后必须手动删除它,而且我不知道如何使这些指针成为智能指针;
类型是 std::unique_ptr 但是我需要一个指向该类型指针的指针,所以我尝试了:
std::unique_ptr<std::unique_ptr<std::unique_ptr<someClass>>> myArray;
但在此之后,我不知道如何分配它。有人可以帮帮我吗?
【问题讨论】:
-
一维
vector<unique_ptr<T>>应该是二维智能指针数组的良好替代品。 -
另外,二维数组不是双指针。
-
在 C++ 中,“X 的二维数组”拼写为
std::vector<std::vector<X> >。 -
@n.m.需要注意的是,在这种情况下,内存不是连续的。这可能是也可能不是问题,但我通常会说“X 的二维数组是一个
std::vector<X>和一些(不是那么)聪明的索引”。
标签: c++ arrays memory-management multidimensional-array smart-pointers