Почему вы должны использовать конструктор копирования / перемещения или деструктор по умолчанию?

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

7
задан 27 September 2010 в 14:56
поделиться