运算符 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[] 有啥作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

用“+”运算符为对象添加前缀有啥作用? [复制]

在 Javascript 中使用多个 = 运算符有啥作用? [复制]

声明构造函数私有和 =delete 有啥区别?

等号后面的波浪号有啥作用? [复制]

赋值运算符和复制构造函数有啥区别?

Malloc 和 new 运算符分配内存有啥区别? [复制]