【问题标题】:why is it possible to make the destructor pure virtual [duplicate]为什么可以使析构函数成为纯虚拟的[重复]
【发布时间】:2015-08-09 04:48:41
【问题描述】:

据我在cpp中了解,当我们删除一个对象或main完成时,所有对象的析构函数都会被调用。对于类型为子类的对象,先调用子类的析构函数,再调用父类的析构函数。
现在我很困惑。因为如果允许使用纯虚析构函数,那么当我们删除 child 类的对象时如何调用它呢?不是调用了纯虚类父类的析构函数吗?

【问题讨论】:

  • 基类中的纯虚析构函数声明强制任何派生类实现析构函数,所以如果你有一个指向基类的指针并删除它,那么派生类dtor就会被调用
  • @TartanLlama 谢谢

标签: c++ destructor pure-virtual


【解决方案1】:

是的,基类的析构函数被调用。这意味着它必须有一个实现。可以为任何纯虚函数提供实现,包括析构函数。例如:

struct foo
{
    virtual ~foo() = 0; // pure virtual dtor
};

foo::~foo() {} // implementation

纯虚析构函数的用例是确保没有任何其他纯虚方法的类不能被实例化。

【讨论】:

  • 所以纯虚函数只有在它是析构函数时才能实现?
  • @Thomas 不,其他纯虚成员函数可以也有实现,但析构函数必须。我会澄清的。
  • 非常感谢。我被一本愚蠢的书误导了。
猜你喜欢
  • 2014-08-05
  • 1970-01-01
  • 2012-03-09
  • 2015-11-12
  • 2019-12-08
  • 1970-01-01
  • 2014-02-02
  • 2010-11-10
  • 2021-12-09
相关资源
最近更新 更多