Sum*_*udu 3 c++ destructor memory-management virtual-destructor c++14
在一个类(没有直接指针成员)中,我看到了以下三种定义析构函数的可能性。
class Child : public Parent
{
public:
// ~Child() override {} // (1) explicit destructor with empty body
// ~Child() override = default; // (2) explicit default destructor
// // (3) implicit default destructor
private:
// members
}
Run Code Online (Sandbox Code Playgroud)
是否可以/应该(1)始终避免选择?因为(2)当我使用option时,Clang-Tidy会提示我采用option (1)。
三种不同的选择之间的一般区别是什么?选择一个以上时应考虑什么?
是否可以/应该始终避免选择(1)?
假设该语言是非古代版本,是的。据我所知,使用空非默认析构函数的唯一原因是支持C ++ 03和更早的标准。
选择一个以上时应考虑什么?
override说明符)。根据经验,尽可能使用3.。如果不可能(例如,上述PIMPL情况),则使用2。如果不可能(即,您需要支持C ++ 03),则使用1。