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).Неявно объявленный деструктор является встроенным публичным членом своего класса.