我总是想知道是否有用于删除标准C++语言中的多维数组的运算符.
如果我们创建了一个指向单维数组的指针
int *array = new int[size];
删除看起来像:
delete [] array;
那很棒.但如果我们有二维数组,我们就做不到
delete [][] twoDimenstionalArray;
相反,我们应该循环和删除项目,就像在这个例子中一样.
谁能解释为什么?
从技术上讲,C++中没有二维数组.您作为二维数组使用的是一维数组,每个元素都是一维数组.由于技术上不存在,C++无法删除它.
因为没办法打电话
int **array = new int[dim1][dim2];
所有新闻/删除都必须平衡,因此对delete [][]
运营商没有意义.
new int[dim1][dim2]
返回指向dim1
类型大小的数组的指针int[dim2]
.所以dim2
必须是编译时常量.这类似于在堆栈上分配多维数组.
在该示例中多次调用delete的原因是因为new也被多次调用.必须为每个新的调用删除.
例如,如果我分配1,000,000字节的内存,我以后不能删除200,000 - 300,00中的条目,它被分配为一个整块,必须作为一个整块释放.
你必须循环的原因,就像你提到的例子一样,编译器/分配器不知道需要删除的数组的数量.
当您分配二维数组时,您确实创建了N个一维数组.现在每个都必须删除,但系统不知道有多少.顶级数组的大小,即指向二级数组的指针数组,就像C中的任何其他数组一样:系统不存储它的大小.
因此,没有办法delete [][]
按照您的描述实现(不会显着改变语言).