【问题标题】:How delete[] works behind the scene in c++? [duplicate]在 C++ 中,delete[] 如何在幕后工作? [复制]
【发布时间】:2019-07-22 07:18:43
【问题描述】:

当我们为 int 数据类型使用 new 运算符动态分配内存时。使用删除运算符是有意义的。 例如 如果代码如下: int *p=new int; delete p;

这里使用 delete 是有意义的。在这里,我们可以这样认为块,p 点,删除/取消分配该内存块。 但是对于下面的代码:

int *p=new int[5]; delete[] p;

在这里使用 delete[] 有什么意义。我问这个是因为 p 不是数组的名称。这里 p 只是一个简单的指针,它指向数组内存块的第一个元素。现在 delete[] 如何删除整个数组。因为这里没有提到数组的大小。那么delete[] p;这个语句是如何删除整个数组的呢。

【问题讨论】:

  • 由于p只是一个指针,编译器和标准库都不知道它指向数组的第一个元素,所以不能使用非数组@987654325 @ 操作员。编译器和标准库需要知道你正在释放一个数组,这就是为什么你需要使用delete[]。
  • @Someprogrammerdude int 回复您:不能使用非数组删除操作符。但它可以删除 p;
  • 尝试创建一个需要调用其析构函数的对象的数组,它将不再起作用。 new必须与delete匹配,new[]必须与delete[]匹配。

标签: c++ delete-operator


【解决方案1】:

由编译器决定如何做到这一点。一种相当标准的方法是将数组的大小存储在分配的内存块之前的技术标头中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 2011-04-15
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多