私は現在、私の古いプロジェクトをメモリセーフにする途中です。
このプロジェクトでは、独自のクラスのインスタンスへのポインターが取り込まれた 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>
の代わりに の2D 配列を作成するというアイデアがありました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));
}
}
ただし、これを試してみると、コンパイラは 2 番目の for ループ ('j' インクリメント セクション) を完全に無視し、1 次元配列のみを作成することを決定します。
2D配列にC++
問題がありますか? そして、sunique_ptrs
へのポインターの2D配列に固執し、スコープ外になったときにこの配列が確実に削除されるようにする必要がありますか?Block
unique_ptr