【问题标题】:Delete invokes the destructor删除调用析构函数
【发布时间】:2012-03-13 15:57:35
【问题描述】:

我正在动态地为一个对象分配内存,然后如果我调用 delete 会发生什么? 调用析构函数还是删除函数有不同的内存处理方式?

考虑以下示例:

class A 
{
 int x;
}

int main()
{
A *ptr = new A();
delete ptr;
return 0;
}

析构函数在哪里调用?

【问题讨论】:

  • A 中定义析构函数并查看调用!!
  • 它应该在delete 上调用,但你可以在析构函数中设置一个断点并逐步执行。
  • Ken,将已删除的指针设置为NULL 是一个好习惯。如果您删除已删除(未分配)的内存,这是未定义的行为,但如果您删除 NULL 指针,则不会发生任何事情。此外,您应该考虑使用 RAII 来满足您的所有资源(不仅仅是内存)需求。
  • 将已删除的指针设置为NULL不是一个好习惯,因为您无法检测到双重删除,这是一个错误。毕竟:使用 shared_ptr 或 unique_ptr 来管理对象的生命周期。

标签: c++ destructor new-operator delete-operator


【解决方案1】:

带有delete操作符的表达式,首先调用适当的析构函数(如果需要),然后调用函数操作符delete来释放存储。 详情请查看here

【讨论】:

    【解决方案2】:

    delete 自动调用析构函数,然后释放内存。

    【讨论】:

      【解决方案3】:

      是的,delete 调用了析构函数。

      【讨论】:

        猜你喜欢
        • 2014-12-27
        • 2013-09-30
        • 2017-08-28
        • 2013-11-16
        • 2016-07-11
        • 2012-02-12
        • 2011-11-05
        • 2019-06-09
        • 2013-10-10
        相关资源
        最近更新 更多