Условия для автоматической генерации по умолчанию/копировать/перемещать конструктор и копирования/перемещения оператора присваивания?
Я хочу обновить свою память на условиях, при которых компилятор обычно автоматически генерирует конструктор по умолчанию, конструктор копирования и оператор присваивания.
Я помню, что были некоторые правила, но я не помню, а также не могу найти авторитетный ресурс в интернете. Кто-нибудь может помочь?
2 ответа:
в следующем "автоматически сгенерированный "означает"неявно объявленный как дефолт, но не определенный как удаленный". Существуют ситуации, когда специальные функции-члены объявляются, но определяются как удаленные.
- конструктор по умолчанию генерируется автоматически, если нет пользователя-заявил конструктор (§12.1/5).
- конструктор копирования создается автоматически, если нет пользователя-заявил конструктор перемещения или перемещения оператора присваивания (т. к. нет перемещения конструкторы или двигаться операторы присваивания в C++03, это упрощает "всегда" в C++03) (§12.8/8).
- оператор присваивания копирования генерируется автоматически, если нет объявленного пользователем конструктора перемещения или оператора присваивания перемещения (§12.8/19).
- деструктор генерируется автоматически, если нет объявленного пользователем деструктора (§12.4/4).
C++11 и более поздние версии:
- конструктор перемещения создается автоматически, если нет объявленного пользователем конструктора копирования, скопируйте оператор присваивания или деструктор, и если сгенерированный конструктор перемещения действителен (§12.8/10).
- оператор присваивания перемещения генерируется автоматически, если нет объявленного пользователем конструктора копирования, оператора присваивания копирования или деструктора, и если сгенерированный оператор присваивания перемещения действителен (например, если ему не нужно будет назначать постоянные члены) (§12.8/21).