如何使用智能指针声明二维数组?
How to declare an array over two dimensions with smart pointers?
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?
可能这就是您要找的东西,但我认为它不实用。您可以改用向量的向量或某种可以处理多维数组的其他结构或库。
int main()
{
unique_ptr<unique_ptr<int[]>[]> ptr(new unique_ptr<int[]>[5] {});
for (int i = 0; i < 5; i++)
{
unique_ptr<int[]> temp_ptr(new int[5]);
for (int j = 0; j < 5; j++)
temp_ptr[j] = i*5 + j;
ptr[i] = move(temp_ptr);
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
cout << ptr[i][j] << " ";
cout << "\n";
}
}
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?
可能这就是您要找的东西,但我认为它不实用。您可以改用向量的向量或某种可以处理多维数组的其他结构或库。
int main()
{
unique_ptr<unique_ptr<int[]>[]> ptr(new unique_ptr<int[]>[5] {});
for (int i = 0; i < 5; i++)
{
unique_ptr<int[]> temp_ptr(new int[5]);
for (int j = 0; j < 5; j++)
temp_ptr[j] = i*5 + j;
ptr[i] = move(temp_ptr);
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
cout << ptr[i][j] << " ";
cout << "\n";
}
}