如何删除这个二维指针数组?制作析构函数

How to delete this 2-dimensional array of pointers? Making a destructor

本文关键字:数组 指针 析构函数 二维 何删除 删除      更新时间:2023-10-16
malla = new Celula**[n + 2];  
for(int i = 0 ; i < n + 2 ; ++i){  
     malla[i] = new Celula*[m + 2];
     for(int j = 0 ; j < m + 2 ; ++j){
         malla[i][j] = new Celula[m];
     }
}

正在编写这段代码,我像这样分配内存(我想要一个指向 Celula 的n*m指针数组,可以吗?现在我需要一个析构函数。

现在我不知道如何访问这个数组中的对象,并且:

malla[i][j].setestado(true);

不行。

不要使用指针。

std::vector<std::vector<Celula> > malla(n, std::vector<Celula>(m));
// …
malla[1][2].setestado(true);

结果:一行而不是七行,使用更方便,任何地方都不需要delete

顺便说一句,在代码中使用英语标识符是惯例。如果不出意外,这样做的好处是,如果人们不和你说同一种语言,他们可以更好地帮助你。

认真考虑@konrad的建议。如果你想使用原始数组,你可以这样做:

要解除分配:

 for(int i = 0 ; i < n + 2 ; ++i)
 {
 for(int j = 0 ; j < m + 2 ; ++j) delete[] malla[i][j] ;
 delete[] malla[i];
 }
 delete[] malla;

要访问对象:

 malla[i][j][_m].setestado(true);

编辑:

如果malla[i][j]是指向简单对象的指针,则析构函数/释放将如下所示:

 for(int i = 0 ; i < n + 2 ; ++i)
 {
 for(int j = 0 ; j < m + 2 ; ++j) delete malla[i][j] ;
 delete[] malla[i];
 }
 delete[] malla;

访问对象/成员可以像这样完成:(*malla[i][j]).setestado(true);malla[i][j]->setestado(true);