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);
不起作用。
答案 0 :(得分:5)
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);