c++ c++-faq copy-constructor assignment-operator rule-of-three
我最初发布这个只是关于析构函数的问题,但现在我正在添加对默认构造函数的考虑.这是原始问题:
如果我想给我的类一个虚拟的析构函数,但是与编译器生成的析构函数相同,我可以使用
=default:Run Code Online (Sandbox Code Playgroud)class Widget { public: virtual ~Widget() = default; };但似乎我可以通过使用空定义减少输入来获得相同的效果:
Run Code Online (Sandbox Code Playgroud)class Widget { public: virtual ~Widget() {} };这两种定义的行为方式有何不同?
根据此问题的回复,默认构造函数的情况似乎相似.鉴于析构函数的" =default"和" {}"之间的含义几乎没有差异,默认构造函数的这些选项之间的含义几乎没有差别吗?也就是说,假设我想创建一个类型,其中该类型的对象将被创建和销毁,为什么我要说
Widget() = default;
Run Code Online (Sandbox Code Playgroud)
代替
Widget() {}
Run Code Online (Sandbox Code Playgroud)
?
如果在原始帖子违反某些SO规则后延长此问题,我深表歉意.为默认构造函数发布一个几乎完全相同的问题让我觉得不太理想.
c++ user-defined-functions default-constructor deleted-functions c++11
我不明白为什么我会这样做:
struct S {
int a;
S(int aa) : a(aa) {}
S() = default;
};
Run Code Online (Sandbox Code Playgroud)
为什么不说:
S() {} // instead of S() = default;
Run Code Online (Sandbox Code Playgroud)
为什么要为此引入一个新关键字?