C ++正确删除动态分配的内存

时间:2016-12-22 18:35:43

标签: c++ arrays pointers memory-leaks destructor

我想知道你们其中一个人是否可以确认我正在正确删除一些动态分配的内存。

下面的TileWrapper初始化为2D指针数组:

private:
    TileWrapper*** mLayout;

我已经简化了初始化,向您展示了重要的部分:

void generateLayout() {
    mLayout = new TileWrapper**[mRows];
    for(int i = 0; i < mRows; i++) {
        mLayout[i] = new TileWrapper*[mColumns];
    }
    for(int i = 0; i < mRows; i++) {
        for(int j = 0; j < mColumns; j++) {
            mLayout[i][j] = new TileWrapper();
        }
    }
}

我需要确认的部分是破坏,如下所示:

~Destructor() {
    for (int i = 0; i < mRows; i++) {
        for (int j = 0; j < mColumns; j++) {
            delete mLayout[i][j];
        }
        delete[] mLayout[i];  // CONFIRM THIS
    }
    delete[] mLayout;  // CONFIRM THIS
}

我特别关注由于[]字符而导致//确认之后的删除。我的代码是内存泄漏证明吗?感谢。

1 个答案:

答案 0 :(得分:0)

就所显示的代码而言,它是安全的。混淆可能来自使用的第二个for循环。它实际上相当于

@"^[آ-ی]+$"

即使在K&amp; R时代,具有三指针的结构也有一个缺点:由于您在代码中分别分配每个“列”,因此无法保证占用整块内存区域,因此它不是多维数组内存模型的指针,应该向这个“数组”的用户声明。  在C ++中,不可能一次性分配整个数组并使用它的下标而不创建辅助模板类型或重新定义operator []