数组指针数组的析构函数

时间:2013-10-11 15:45:55

标签: c++ arrays pointers destructor

好的,我有这个构造函数:

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的值。我的问题是我应该如何为这样的情况实现我的析构函数,我理解每个指针数组的创建概念,但在破坏中我仍然有点迷失。任何帮助表示赞赏!

3 个答案:

答案 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