gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:45:39 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com