c – 使用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];
但不断收到错误,说没有operator =匹配这些操作数.我在这做错了什么?
解决方法:
您不能将int *分配给std :: unique_ptr< int []>,这是导致错误的原因.正确的代码是
a[i] = std::unique_ptr<int[]>(new int[2]);
但是,piokuc是正确的,对于数组使用unique_ptr是非常不寻常的,因为这是std :: vector和std :: array的用途,具体取决于是否提前知道大小.
//make a 5x2 dynamic jagged array, 100% resizable any time
std::vector<std::vector<int>> container1(5, std::vector<int>(2));
//make a 5x2 dynamic rectangular array, can resize the 5 but not the 2
std::vector<std::array<2, int>> container1(5);
//make a 5x2 automatic array, can't resize the 2 or 5 but is _really fast_.
std::array<5, std::array<2, int>> container;
所有这些都可以初始化并使用与您已有的代码相同,除非它们更容易构建,并且您不必销毁它们.
标签:c,c11,unique-ptr 来源: https://codeday.me/bug/20191005/1855386.html