运算符 delete[] 有啥作用? [复制]
Posted
技术标签:
【中文标题】运算符 delete[] 有啥作用? [复制]【英文标题】:What does the operator delete[] do? [duplicate]运算符 delete[] 有什么作用? [复制] 【发布时间】:2018-01-03 05:55:04 【问题描述】:#include <iostream>
using namespace std;
class A
public:
int s;
// ~A()
;
int main()
A *c = new A[10];
delete c;
return 0;
上面的代码可以成功运行,但是当我的代码会出错。谁能告诉我为什么?
【问题讨论】:
【参考方案1】:您的代码行为未定义。
如果c
是指向使用new[]
分配的内存的指针,则您必须写delete[] c;
。
(有趣的是,一些编译器会为你解决这个问题,但不要依赖它,因为你不是在编写可移植的 C++)。
【讨论】:
谢谢。我明白你的意思。但是为什么我在为 A 类添加析构函数时会出错?我很困惑。 这就是未定义行为的本质。任何事情都有可能发生。 好的。顺便说一句,如果我A *a = new A[10]
得到一个数组。 g++ 会将 a 的长度放在 (int*)a - 1
中吗?就像其他编译器一样。
我认为它可能会将长度设置为(size_t*)a - 1
,但我不确定。以上是关于运算符 delete[] 有啥作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章