Информация об изменениях

Сообщение Re: конструктор перемещения для std::exception от 26.09.2018 10:10

Изменено 26.09.2018 10:12 rg45

Re: конструктор перемещения для std::exception
Здравствуйте, B0FEE664, Вы писали:

BFE>Почему у std::exception нет move конструктора?


BFE>Задача: поймать и конвертировать велосипедное исключение в исключение отнаследованное от std::exception, а результат бросить дальше.

BFE>Соответственно, если я напишу:
BFE>
BFE>class NewException : public std::exception
BFE>{
BFE>public:  
BFE>    NewException()noexcept{}
BFE>    NewException(const NewException&) noexcept = default;
BFE>    NewException(NewException&&     ) noexcept = default; 
BFE>    virtual ~NewException() {}
BFE>    virtual const char* what() const noexcept;
BFE>//...
BFE>};
BFE>


BFE>то сможет ли компилятор создать код для NewException(NewException&&) если у базового класса (std::exception) нет подходящего конструктора? Или же NewException(NewException&&) не будет создан вовсе?


Не будет создан вовсе, если в перемещающий конструктор в базовом классе явно объявлен удаленным. В други случаях подхватится либо конструктор перемещения базового класса (если доступен), либо копирующий.
Re: конструктор перемещения для std::exception
Здравствуйте, B0FEE664, Вы писали:

BFE>Почему у std::exception нет move конструктора?


BFE>Задача: поймать и конвертировать велосипедное исключение в исключение отнаследованное от std::exception, а результат бросить дальше.

BFE>Соответственно, если я напишу:
BFE>
BFE>class NewException : public std::exception
BFE>{
BFE>public:  
BFE>    NewException()noexcept{}
BFE>    NewException(const NewException&) noexcept = default;
BFE>    NewException(NewException&&     ) noexcept = default; 
BFE>    virtual ~NewException() {}
BFE>    virtual const char* what() const noexcept;
BFE>//...
BFE>};
BFE>


BFE>то сможет ли компилятор создать код для NewException(NewException&&) если у базового класса (std::exception) нет подходящего конструктора? Или же NewException(NewException&&) не будет создан вовсе?


Не будет создан вовсе, если в перемещающий конструктор в базовом классе явно объявлен удаленным. В остальных случаях подхватится либо конструктор перемещения базового класса (если доступен), либо копирующий.