【问题标题】:What does a implicitly defined destructor do隐式定义的析构函数有什么作用
【发布时间】:2018-12-11 02:29:17
【问题描述】:

隐式定义的析构函数有什么作用?它只是一个由编译器定义的空函数吗?

struct Foo
{
  int i;
};

struct Bar
{
  int i;
  ~Bar()
  { 
    // empty...
  }
};

Foo的销毁和Bar一样吗?还是隐式析构函数在编译器生成的主体内部做了什么?

【问题讨论】:

    标签: c++ destructor object-lifetime


    【解决方案1】:

    隐式定义的析构函数有什么作用?

    它与显式定义的具有空主体的析构函数相同。实际上,它会销毁所有子对象,并且什么也不做。

    它只是一个由编译器定义的空函数吗?

    实际上,甚至可能不需要一个空函数。但是,在用抽象机器进行思考时,认为存在可能会很有用。

    或者隐式析构函数在编译器生成的主体内部做些什么?

    取决于班级。对于Foo,析构函数不需要做任何事情。

    【讨论】:

    • 您可能想了解琐碎,以及为什么它很重要。
    • @Deduplicator 好的,Bar 的析构函数并不重要,因为它是用户定义的,即使它是空的。从技术上讲,必须用delete 销毁Bar,而Foo 的内存可以简单地解除分配,即使Bar 的析构函数也不做任何事情。还有什么?
    • @PeterA.Schneider 从技术上讲,必须调用dtor(这是删除表达式的部分)。并且用户代码可以判断 dtor 是否微不足道,并在这种情况下自动优化。
    猜你喜欢
    • 2021-12-09
    • 2012-01-23
    • 2018-10-05
    • 2010-10-01
    • 2014-11-26
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 2014-12-02
    相关资源
    最近更新 更多