c++ - 当类是更大框架的一部分时,析构函数是否应该始终是虚拟的?

标签 c++

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/

相关文章:

c++ - 我的程序总是停止工作 :S (C++)

c++ - 如何使用位掩码?

c++ - 使用 mingw 在 Linux 上交叉编译 Direct3D

c++ - 如何将这些连接在一起?

c++ - 模板化重复类型错误

c++ - "Ignoring unknown option/NODEFAULTLIB:LIBCMTD"

c++ - Qt 部署 - QGraphicsView 不显示在其他机器上

c++ - 访客实现 : Constant versus Mutable Visitor

c++ - 存储抽象成员,保持接口(interface)简单

c++ - 如何从我的项目 CMakeLists.txt 构建 gtest 静态库?