如何删除这个二维指针数组?制作析构函数
How to delete this 2-dimensional array of pointers? Making a destructor
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);
相关文章:
- 添加到数组指针
- C++语法差异:二维和一维数组(指针算术)
- 数组指针表示法C++(移动数组时)
- 复制后删除原始数组指针将前 3 个字节设置为 0
- C++访问指向结构的指针中的类数组指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 创建<int>对整数数组指针的矢量引用 (C++)
- 将 2D 数组指针传递给 C++ 中的函数
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 队列数组指针 (C++)
- C++数组指针上的删除操作
- 对于循环不循环和检测字符数组 [指针和字符数组]
- 如何初始化数组指针对象
- 如何正确传递 2D 数组指针作为参数
- 从数组指针中获取怪异的数字
- 初始化std :: unique_ptr作为原始数组指针的初始化
- 将结构数组指针从C#传递到C
- STD :: Sort将数组指针设置为NULL
- C++数组指针错误无法将“int*”转换为“int**”