C ++删除[]运算符[重复]

Posted

技术标签:

【中文标题】C ++删除[]运算符[重复]【英文标题】:C++ delete[] operator [duplicate] 【发布时间】:2010-04-28 09:34:13 【问题描述】:

这是使用 delete[] 运算符的正确方法吗?

int* a=new int[size];
delete[] a;

如果是,谁(compilerGC 或任何人)将确定新创建的数组的大小?它会将数组大小存储在哪里?

谢谢

【问题讨论】:

这不是创建数组的正确方法,因为您将它分配给一个 int,然后尝试删除一个 int。它应该是 int *a = new int[size]; 【参考方案1】:

对于分配的每个内存块,内存分配器存储块的大小(这就是为什么分配许多小块与分配一个大块相比效率低下的原因)。当 delete 释放内存时,分配器知道指针指向的内存块有多大。

【讨论】:

如果我分配的大小大于内存块怎么办?它会删除仅指向的第一个内存块吗? @Betamoo:要么它会分配足够的内存,要么抛出异常以表明它不能。所以你不能“释放更少”——内存管理器会自行决定。 ... 当您调用 delete[] 时,它还会调用适当数量的析构函数。【参考方案2】:

从技术上讲,这种用法是完全有效的。但是,像这样更新数组通常不是一个好主意,您应该使用 std::vector。

【讨论】:

【参考方案3】:

顺便说一句,每次你想写new T[size],你可能应该改用std::vector<T>。使用指向动态数组的本地指针,在抛出异常的情况下很难保证适当的内存释放。

【讨论】:

以上是关于C ++删除[]运算符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

没有“new”的C ++删除运算符[重复]

c语言如何判断一个数组中重复元素的个数,并输出这个个数的值?

在一行中删除多个指针。 C++ [重复]

用字符串作为输入用c编写计算器程序[重复]

C语言 集合运算

C ++“删除[]”运算符仅删除2个第一个值[关闭]