1

Ok, I have this constructor:

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;
        }
    }
}

where board is an array of the number of rows where each item in the array points to an array of length of the number of columns, so this board is set up and initialized to values of -1. My question is how I'm supposed to implement my destructor for a case like this, I understand the concept of the creation of each array of pointers, but in destruction I'm still a little lost. Any help is appreciated!

4

3 回答 3

5

第一点:不要这样做。只是不要。使用 anstd::vector来存储数据,并且用户运算符重载以允许客户端使用 2D 维度对其进行索引。

也就是说,无论如何你可能都会坚持这样做,所以你最好至少知道基本思想:拿你原来new的s,然后把它们倒过来。所以,你开始:

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;

不过我会重复一遍:只使用 astd::vector来存储要干净得多。

于 2013-10-11T15:52:04.483 回答
2

对于您分配的所有内容new[],请调用 a delete[],对于您分配的所有内容new,请调用delete.

你正在做一个顶级new[]分配(所以一个delete[])和另一个numRows new[]分配,每个都需要自己的delete[].

取消分配的顺序应颠倒。

实际代码留作练习。

于 2013-10-11T15:48:27.247 回答
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
于 2013-10-11T15:56:21.537 回答