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

时间:2012-03-10 15:51:44

标签: c++ arrays pointers delete-operator

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

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

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

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

不起作用。

2 个答案:

答案 0 :(得分:5)

Don’t use pointers

std::vector<std::vector<Celula> > malla(n, std::vector<Celula>(m));

// …
malla[1][2].setestado(true);

Upshot:一行而不是七行,更容易使用,任何地方都不需要delete

顺便说一句,在代码中使用英语标识符是常规的。如果不出意外,这样做的好处是,如果人们不会说与您相同的语言,那么人们可以更好地帮助您。

答案 1 :(得分:3)

认真考虑@ 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);

那样完成