有this question在 stackoverflow 上提倡 Scott Meyers 规则,即只有在该类中有虚函数时才将析构函数设为虚函数。
我在一家拥有大型框架的公司工作,在编码时尚不清楚您的类(class)将来是否会扩展。在那个时间点,也可能无法更改该类(因为它是已发布包的一部分)。
现在想象以下场景:
class A {
public:
A();
virtual ~A();
virtual m();
};
class B : public A {
public:
B();
~B();
};
class C : public B {
public:
C();
virtual ~C();
virtual m();
};
所以我创建了 class B
并且到现在为止,它无法更改。
现在 class C
已创建,并用作 B
:
B * b = new C();
delete b;
C 的析构函数永远不会被调用会发生什么,对吗?
在此场景中: 一个类是否应该总是有一个虚拟析构函数?
最佳答案
当基类有虚析构函数时,所有从它继承的类都会自动有虚析构函数(所以在你的例子中 - B 的析构函数是隐式虚拟的)
如果要扩展/继承类,则它应该具有虚拟析构函数。
关于c++ - 当类是更大框架的一部分时,析构函数是否应该始终是虚拟的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30392041/