我目前正在制作我的一个旧项目的内存安全。
在这个项目中,我有一个 2D 数组,其中填充了指向我自己的类实例的指针Block
。
声明如下:
Block* gemGrid[xMax][yMax];
然后像这样填充:
for(int i = 0; i<8; i++)
{
for(int j = 0; j<8; j++)
{
//do stuff here
gemGrid[i][j] = new Block(i,j, gridOffset);
}
}
这工作正常。
我有创建一个二维数组unique_ptr<Block>
而不是Block*
.
我决定这样声明:
unique_ptr<Block> gemGrid[xMax][yMax];
并像这样填充:
for(int i = 0; i<8; i++)
{
for(int j = 0; j<8; j++)
{
gemGrid[i][j].reset( new Block(i,j, gridOffset));
}
}
然而,当我尝试这个时,编译器决定完全忽略第二个 for 循环('j' 递增部分),并且只创建一个一维数组。
这让我问,二维数组C++
有问题吗?unique_ptrs
我是否应该坚持使用指向Block
s 的 2D 指针数组,并unique_ptr
确保该数组超出范围时被杀死?