当前位置:  开发笔记 > 编程语言 > 正文

为什么"删除[] [] ...... multiDimensionalArray;" C++中的operator不存在

如何解决《为什么"删除[][]multiDimensionalArray;"C++中的operator不存在》经验,为你挑选了4个好方法。

我总是想知道是否有用于删除标准C++语言中的多维数组的运算符.

如果我们创建了一个指向单维数组的指针

int *array = new int[size];

删除看起来像:

delete [] array;

那很棒.但如果我们有二维数组,我们就做不到

delete [][] twoDimenstionalArray;

相反,我们应该循环和删除项目,就像在这个例子中一样.

谁能解释为什么?



1> Dan Goldstei..:

从技术上讲,C++中没有二维数组.您作为二维数组使用的是一维数组,每个元素都是一维数组.由于技术上不存在,C++无法删除它.



2> Greg Rogers..:

因为没办法打电话

int **array = new int[dim1][dim2];

所有新闻/删除都必须平衡,因此对delete [][]运营商没有意义.

new int[dim1][dim2]返回指向dim1类型大小的数组的指针int[dim2].所以dim2必须是编译时常量.这类似于在堆栈上分配多维数组.



3> KPexEA..:

在该示例中多次调用delete的原因是因为new也被多次调用.必须为每个新的调用删除.

例如,如果我分配1,000,000字节的内存,我以后不能删除200,000 - 300,00中的条目,它被分配为一个整块,必须作为一个整块释放.


因此,对等也是如此,如果它被分配为多个块,则它必须被释放为多个块

4> 小智..:

你必须循环的原因,就像你提到的例子一样,编译器/分配器不知道需要删除的数组的数量.

当您分配二维数组时,您确实创建了N个一维数组.现在每个都必须删除,但系统不知道有多少.顶级数组的大小,即指向二级数组的指针数组,就像C中的任何其他数组一样:系统不存储它的大小.

因此,没有办法delete [][]按照您的描述实现(不会显着改变语言).

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有