vol*_*nto 7 c++ overriding destructor c++11
override析构函数是好的做法吗?为什么或者为什么不?例:
class Foo : Base
{
public:
~Foo() override {}
};
Run Code Online (Sandbox Code Playgroud)
struct Base {
virtual ~Base() {}
};
struct Foo : Base {
~Foo() override {}
};
Run Code Online (Sandbox Code Playgroud)
这个编译.
struct Base {
~Base() {}
};
struct Foo : Base {
~Foo() override {}
};
Run Code Online (Sandbox Code Playgroud)
这不.
struct Base {
~Base() {}
};
struct Foo : Base {
virtual ~Foo() {}
};
Run Code Online (Sandbox Code Playgroud)
这编译.
实例.
如果您的目标是Foo声明您希望Base有一个virtual析构函数,那么最简单的方法是使用override关键字on ~Foo.由于删除的语义Foo*通过Base*显著取决于如果变化~Foo是virtual,这可能是对某些人有用.
其他人可能会因使用该术语override来指代这种情况而受到冒犯.
确定是否被人利用offenced override较多,或比能说出在不太重要Foo的是Base有一个虚析构函数,所以删除的实例,Foo通过指针Base被定义的行为.我无法为你做出决定.
正如@HowardHinnant在评论中所述,添加显式析构函数会产生后果; 如果这样做,请遵循5的规则=default,=delete或者实现复制/移动对象构造/赋值运算符.
这可能是更容易static_assert的是Base有一个虚析构函数,除非你需要一些其他原因的析构函数.
| 归档时间: |
|
| 查看次数: |
2008 次 |
| 最近记录: |