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 копирования и перемещения —и если они исключены, реализация по умолчанию не будет работать. У класса всегда есть dtor.
Зачем вам нужно явно задавать по умолчанию ctor копирования, перемещать ctor или деструктор? В любом случае, не будут ли неявно сгенерированные реализации делать то же самое?