我最初将此问题仅发布为关于析构函数的问题,但现在我添加了对默认构造函数的考虑。这是原始问题:
如果我想给我的类一个虚拟的析构函数,但在其他方面与编译器生成的析构函数相同,则可以使用
=default
:class Widget { public: virtual ~Widget() = default; };
但是似乎我可以通过使用空定义进行更少的键入而获得相同的效果:
class Widget { public: virtual ~Widget() {} };
这两种定义有什么不同的表现方式吗?
根据针对该问题发布的答复,默认构造函数的情况似乎类似。既然对于析构函数,“ =default
”和“ {}
”之间的含义几乎没有差异,那么对于默认构造函数,这些选项之间的含义几乎也没有差异吗?也就是说,假设我要创建一个将同时创建和销毁该类型的对象的类型,为什么我要说
Widget() = default;
代替
Widget() {}
?
如果在发布原始问题后再提出此问题违反了某些SO规则,我深表歉意。为默认构造函数发布一个几乎相同的问题令我震惊,因为它是不太理想的选择。
std::has_trivial_destructor<Widget>::value
是true
第一个,但false
第二。我也不知道这意味着什么。:)
= default
更明确的imo,并且与构造函数对其的支持一致。