gpt4 book ai didi

c++ - 虚拟析构函数的默认覆盖

转载 作者:IT老高 更新时间:2023-10-28 12:39:21 28 4
gpt4 key购买 nike

每个人都知道基类的析构函数通常必须是虚拟的。但是派生类的析构函数是什么呢?在 C++11 中,我们有关键字“override”和显式使用默认析构函数的能力。

struct Parent
{
std::string a;
virtual ~Parent()
{
}

};

struct Child: public Parent
{
std::string b;
~Child() override = default;
};

在 Child 类的析构函数中同时使用关键字“override”和“=default”是否正确?在这种情况下编译器会生成正确的虚拟析构函数吗?

如果是,那我们是否认为这是一种很好的编码风格,我们应该总是这样声明派生类的析构函数以确保基类析构函数是虚拟的?

最佳答案

Is it correct to use both keywords "override" and "=default" in the destructor of Child class? Will compiler generate correct virtual destructor in this case?

是的,没错。在任何理智的编译器上,如果代码编译没有错误,这个析构函数定义将是一个空操作:它的缺失一定不会改变代码的行为。

can we think that it is good coding style

这是一个偏好问题。对我来说,只有基类类型被模板化才有意义:它将强制要求基类具有虚拟析构函数。否则,当基本类型固定时,我会认为这样的代码是噪音。基类不会神奇地改变。 但是如果你有愚蠢的队友,他们喜欢改变事情而不检查取决于他们可能破坏的代码,最好保留析构函数定义 - 作为额外的保护层。 p>

关于c++ - 虚拟析构函数的默认覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40999791/

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