0

我读到析构函数不能共享,这是真的吗?

我有一个带有几个子类的基类,这些子类的析构函数没有改变。这会导致一些重复的代码。

是否可以共享析构函数?如果不是,我将如何避免这些析构函数中的重复代码?

Class A{

public:
  ~A() {
    //do something
  }
};

class B: public A{
};
class C: public A{
};
class D: public A{
};

现在我想要B,CD具有与 . 相同的析构函数A

4

3 回答 3

2

每个类的析构函数自动调用所有子对象的析构函数,包括基类子对象。因此,您可以通过将析构函数放入基析构函数或成员析构函数来共享析构函数的行为。当然,派生类仍然有自己的析构函数,但在大多数情况下,编译器生成的析构函数(除了对子对象析构函数的强制调用之外什么都不做)就足够了。

于 2013-05-07T17:57:54.147 回答
1

从您的示例中,最简单的方法是:

class A
{
  public:
    virtual ~A()
    {
      // Do stuff
    }
}
于 2013-05-07T18:01:58.650 回答
1

如果您没有在继承类中实现析构函数,则会生成一个基本的析构函数,它将简单地调用基类析构函数。所以它不是共享的,但结果是一样的。

于 2013-05-07T17:59:27.357 回答