好的,我有这个构造函数:
Board::Board(int nRows, int nCols){
numRows=nRows;
numCols=nCols;
int** board=new int*[numRows];
for(int i=0; i<numRows; i++){
board[i]=new int[numCols];
for(int j=0; j<numCols; j++){
board[i] [j]=-1;
}
}
}
其中board是行数的数组,其中数组中的每个项指向列数的长度数组,因此该板设置并初始化为-1的值。我的问题是我应该如何为这样的情况实现我的析构函数,我理解每个指针数组的创建概念,但在破坏中我仍然有点迷失。任何帮助表示赞赏!
答案 0 :(得分:4)
第一点:不要这样做。只是不要。使用std::vector
存储数据和用户操作符重载,以允许客户端使用2D维度为其编制索引。
那就是说,无论如何你都可能会坚持这样做,所以你也可以这样做,至少知道基本的想法:拿走原来的new
,然后将它们反过来说出来。所以,你开始于:
int** board=new int*[numRows];
for(int i=0; i<numRows; i++){
board[i]=new int[numCols];
反过来说,首先要删除单个项目:
for (int i=0; i<numRows; i++)
delete [] board[i];
然后删除外部指针:
delete [] board;
我会重复一遍:只使用std::vector
for the storage更清晰。
答案 1 :(得分:2)
对于您使用new[]
分配的所有内容,请致电delete[]
,对于您使用new
分配的所有内容,请致电delete
。
您正在执行一项顶级new[]
分配(因此一个delete[]
)和另一个numRows
new[]
分配,每个分配都需要自己的delete[]
}。
为了解除分配,应该撤销订单。
实际代码留作练习。
答案 2 :(得分:1)
您最好使用std::vector<std::vector<int> >;
但这就是你需要的东西
for(int i=0; i<numRows; i++){
delete[] board[i]; //Delete each row allotted inside the for loop
}
delete[] board; //Delete the row/array of pointers