【发布时间】:2012-11-14 14:11:28
【问题描述】:
我最初将这个问题发布为仅关于析构函数的问题,但现在我添加了对默认构造函数的考虑。这是原始问题:
如果我想给我的班级一个虚拟的析构函数,但是 否则和编译器生成的一样,我可以使用
=default:class Widget { public: virtual ~Widget() = default; };但似乎我可以使用更少的输入来获得相同的效果 空定义:
class Widget { public: virtual ~Widget() {} };这两个定义有什么不同的表现吗?
根据针对此问题发布的回复,默认构造函数的情况似乎相似。鉴于析构函数的“=default”和“{}”在含义上几乎没有区别,那么默认构造函数的这些选项之间的含义是否也几乎没有区别?也就是说,假设我想创建一个类型,该类型的对象将被创建和销毁,我为什么要说
Widget() = default;
而不是
Widget() {}
?
如果在原始发布后扩展此问题违反了某些 SO 规则,我深表歉意。为默认构造函数发布一个几乎相同的问题让我觉得不太理想。
【问题讨论】:
-
据我所知,
= default更明确,并且与构造函数对它的支持一致。 -
我不确定,但我认为前者符合“平凡析构函数”的定义,而后者不符合。所以
std::has_trivial_destructor<Widget>::value第一个是true,第二个是false。这意味着什么我也不知道。 :) -
虚拟析构函数绝不是微不足道的。
-
@LucDanton:我想睁开眼睛看看代码也可以!谢谢指正。
标签: c++ c++11 user-defined-functions default-constructor deleted-functions