Сообщение Re[3]: конструктор перемещения для std::exception от 26.09.2018 12:06
Изменено 26.09.2018 12:10 rg45
Re[3]: конструктор перемещения для std::exception
Здравствуйте, B0FEE664, Вы писали:
BFE>Перемещающий конструктор удалён, но не явно:
BFE>
Э нет, это не удален, это скрыт (hidden). В этом случае компилятор сгенерит перемещающий конструктор в производном классе и реализует его через копирующий конструктор базового.
А вот если удалить конструктор перемещения базового класса явно, а в производном классе оставить объявление перемещающего конструктора по умолчанию, то код для него сгенерен не будет и в тех местах, в которых ожидается перемещение, возникнет ощибка компиляции.
BFE>Перемещающий конструктор удалён, но не явно:
BFE>
BFE>namespace std {
BFE> class exception {
BFE> public:
BFE> exception() noexcept;
BFE> exception(const exception&) noexcept;
BFE> exception& operator=(const exception&) noexcept;
BFE> virtual ~ exception();
BFE> virtual const char* what() const noexcept;
BFE> };
BFE>}
BFE>
Э нет, это не удален, это скрыт (hidden). В этом случае компилятор сгенерит перемещающий конструктор в производном классе и реализует его через копирующий конструктор базового.
А вот если удалить конструктор перемещения базового класса явно, а в производном классе оставить объявление перемещающего конструктора по умолчанию, то код для него сгенерен не будет и в тех местах, в которых ожидается перемещение, возникнет ощибка компиляции.
Re[3]: конструктор перемещения для std::exception
Здравствуйте, B0FEE664, Вы писали:
BFE>Перемещающий конструктор удалён, но не явно:
BFE>
Э нет, это не удален, это скрыт (hidden). В этом случае компилятор сгенерит перемещающий конструктор в производном классе и реализует его через копирующий конструктор базового.
А вот если удалить конструктор перемещения базового класса явно (delete), а в производном классе оставить объявление перемещающего конструктора по умолчанию, то код для него сгенерен не будет и в тех местах, в которых ожидается перемещение, возникнет ощибка компиляции.
BFE>Перемещающий конструктор удалён, но не явно:
BFE>
BFE>namespace std {
BFE> class exception {
BFE> public:
BFE> exception() noexcept;
BFE> exception(const exception&) noexcept;
BFE> exception& operator=(const exception&) noexcept;
BFE> virtual ~ exception();
BFE> virtual const char* what() const noexcept;
BFE> };
BFE>}
BFE>
Э нет, это не удален, это скрыт (hidden). В этом случае компилятор сгенерит перемещающий конструктор в производном классе и реализует его через копирующий конструктор базового.
А вот если удалить конструктор перемещения базового класса явно (delete), а в производном классе оставить объявление перемещающего конструктора по умолчанию, то код для него сгенерен не будет и в тех местах, в которых ожидается перемещение, возникнет ощибка компиляции.