stackoverflow上有这个问题,它主张Scott Meyers规则只有在该类中有虚函数时才使析构函数成为虚拟.
我在一家拥有大型框架的公司工作,如果您的课程未来可以扩展,那么在编码时不清楚.在那个时间点,也可能无法更改该类(因为它是已发布的包的一部分).
现在想象以下场景:
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();
};
Run Code Online (Sandbox Code Playgroud)
所以我创造了class B,到现在为止,它无法改变.现在class C已创建,并用作B:
B * b = new C();
delete b;
Run Code Online (Sandbox Code Playgroud)
会发生什么事情,C的析构函数永远不会被调用,对吧?
在这种情况下:一个类总是应该有一个虚拟析构函数?
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |