为什么我们必须在 C++ 中释放数组数组,而不仅仅是整个"matrix"
why do we have to deallocate array of arrays in C++ and not just the entire "matrix"
如果我们有
n=3;
m=3;
A= new int [n];
for(int i=0;i<n;i++){
A[n] = new int[3];
}
我们可以通过首先在所有行上调用delete []
然后最后delete [] A
来释放内存。为什么我们不能delete [] A
?
A
如何确定它需要释放A[0]
、A[1]
A[2]
所指向的任何内容。
例如,如果我编写一个程序,例如:
auto A = new int* [3];
int i0;
int i1;
int i2;
A[0] = &i0;
A[1] = &i1;
A[2] = &i2;
那么delete [] A
试图做任何事情都是错误的。
在直接内存分配的低级别(也称为直接新建/删除使用(下,由开发人员确定所有内容是否正确。
另一方面,C++提供了各种更高级别的功能以使事情变得更容易。例如能够使用执行适当清理的析构函数将内容包装在类中,以及诸如std::array
、std::vector
、std::unique_ptr
等内容。理想情况下,开发人员将这些东西一起使用,以确保子对象/子分配得到适当的管理。
如果你delete
数组,数组的每个元素都会调用它的析构函数。问题是指针没有析构函数,您需要显式delete
它。
相关文章:
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 如何从字符数组(不是字符串数组)中删除符号
- 如何防止每次 Arduino 启动时颜色数组都是相同的随机数组
- 为什么我的 cpp 数组大小是 4 的倍数?
- 张量(多维数组)是树前瞻数据的有效存储类型吗?
- 数组变量是C++中的引用吗?
- 如果 2D 数组不是双指针,那么为什么会发生这种情况?
- 我不明白数组名称是如何指向数组的指针
- 将内存分配给 2D 数组时,“new int*[rowCount];”的含义是什么?是 2D 数组,是指向数组的指针数组
- 是任何类型的数组始终是聚合
- 为什么插入时动态分配的数组大小是初始数组的 2*大小,而不是大小+1?
- 为什么交换多维数组不是例外
- C++字符数组——为什么是垃圾
- C或c++语言中的数组实际上是指针吗?
- 在类中不定义静态数组大小是不是很糟糕--而是让它自动缩放
- 我试图实现合并排序算法从(介绍算法(CLRS))使用c++中的矢量,但数组不是排序,
- OpenCV错误:cvGetSize中的错误参数(数组应该是CvMat或IplImage)
- 我的数组值是如何被覆盖的
- 将' class '指针强制转换为' float '数组:它是如何工作的?