C++0x 允许您将某些函数指定为默认值:
struct A {
A() = default; // default ctor
A(A const&) = default; // copy ctor
A(A&&) = default; // move ctor
A(Other); // other ctor
~A() = default; // dtor
A& operator=(A const&) = default; // copy assignment
A& operator=(A&&) = default; // move assignment
};
这些函数的实现就像编译器生成它们一样,在大多数情况下,当您没有声明自己的函数时,通常会发生这种情况。
如果您声明任何 ctor(上述任何其他 ctor),则不会生成默认 ctor ,因此您可能需要将其默认为“将其恢复”。
但是,除非基成员或数据成员排除它们,否则类始终具有复制和移动 ctor—如果它们被排除,则默认实现将不起作用。一个类总是有一个 dtor。
为什么需要显式默认复制 ctor、移动 ctor 或析构函数?无论如何,隐式生成的实现不会做同样的事情吗?