假设我继承的是一个带有"空的"虚析构函数:
// base.h
class Base {
public:
// ...
virtual ~Base();
};
// base.cc
Base::~Base() {}
如果我不需要在派生类的析构函数中做任何明确的工作,那么添加另一个" empty"是否有任何伤害?一个像bleow?
// derived.h
class Derived : public Base {
public:
// ...
~Derived() override;
};
// derived.cc
Derived::~Derived() {}
this question的答案表明它不是必要的,但有任何伤害吗?
答案 0 :(得分:0)
添加另一个"空"是否有任何伤害一个像bleow?
内联Derived
构造函数的每个翻译单元都必须生成内联析构函数的外联副本,以将其地址放在Derived
的虚拟表中。链接器会丢弃重复的虚拟表,但析构函数的外联副本及其调试信息将保留。
使析构函数脱节可防止上述代码重复,并使您的目标文件,可执行文件和共享库变小。