Стандартный проект C ++ 17 N4659
Для быстрой перекрестной ссылки на стандарты взгляните на разделы «Неявно объявленные» следующих записей cppreference:
Та же информация, конечно, может быть получена из стандарта. Например, на стандартном проекте C ++ 17 N4659 :
15.8.1 «Конструкторы копирования / перемещения» для конструктора копирования:
6 Если определение класса явно не объявляет конструктор копирования, неявный конструктор объявляется неявно. Если в определении класса объявляется конструктор перемещения или оператор присваивания перемещения, неявно объявленный конструктор копирования определяется как удаленный; в противном случае он определяется как значение по умолчанию (11.4). Последний случай считается устаревшим, если класс имеет объявленный пользователем оператор присваивания копии или объявленный пользователем деструктор.
и для конструктора перемещения:
8 Если определение класса X явно не объявляет конструктор перемещения, неявный конструктор будет неявно объявлен как заданный по умолчанию тогда и только тогда, когда
(8.1) - X не имеет объявленного пользователем конструктора копирования,
(8.2) - X не имеет объявленного пользователем оператора присваивания копии,
(8.3) - X не имеет объявленного пользователем оператора присваивания перемещения, и
(8.4) - X не имеет деструктора, объявленного пользователем.
15.8.2 «Оператор присваивания копирования / перемещения» говорит о назначении копии:
2 Если определение класса не объявляет явно оператор присваивания копии, он объявляется неявно. Если в определении класса объявляется конструктор перемещения или оператор присваивания перемещения, неявно объявленный оператор присваивания копии определяется как удаленный; в противном случае он определяется как значение по умолчанию (11.4). Последний случай считается устаревшим, если в классе есть объявленный пользователем конструктор копии или объявленный пользователем деструктор.
и для переезда:
4 Если определение класса X не объявляет явно оператор присваивания перемещения, он будет неявно объявлен как принятый по умолчанию тогда и только тогда, когда
- (4.1) - X не имеет объявленного пользователем конструктора копирования,
- (4.2) - X не имеет объявленного пользователем конструктора перемещения,
- (4.3) - X не имеет объявленного пользователем оператора присваивания копии, и
- (4.4) - X не имеет деструктора, объявленного пользователем.
15.4 «Деструкторы» говорят о деструкторах:
4 Если в классе нет деструктора, объявленного пользователем, деструктор неявно объявляется по умолчанию (11.4). Неявно объявленный деструктор является встроенным публичным членом своего класса.