我读到析构函数无法共享,这是真的吗?
我有一个基类,有几个子类和析构函数 那些子类不会改变。这会导致一些重复 代码。
是否可以共享析构函数?如果不是,我将如何避免这些析构函数中的重复代码?
Class A{
public:
~A() {
//do something
}
};
class B: public A{
};
class C: public A{
};
class D: public A{
};
现在我希望B
,C
和D
拥有与A
相同的析构函数。
答案 0 :(得分:2)
每个类的析构函数都会自动为所有子对象调用析构函数,包括基类子对象。因此,您可以通过将析构函数放在基础或成员析构函数中来共享析构函数的行为。当然,派生类仍然有自己的析构函数,但在大多数情况下,编译器生成的析构函数(除了对子对象析构函数的强制调用之外什么都不做)就足够了。
答案 1 :(得分:1)
如果你没有在继承类中实现一个descructor,那么将生成一个基本的,它将简单地调用基类析构函数。所以它不是共享的,但结果是一样的。
答案 2 :(得分:1)
从您的示例中,最简单的方法是:
class A
{
public:
virtual ~A()
{
// Do stuff
}
}