Требуется ли, чтобы конструкторы перемещения не были исключением?

Я читал некоторые противоречащие статьи в отношении того, разрешено ли перемещать конструкторы/присваивание или нет.

Поэтому я хотел бы спросить, разрешено ли перемещать конструкторы/назначения в финальный С++ 11?

Ответы

Ответ 1

Можно ли вообще переместить конструкторы перемещения? Да. Должны ли они? Нет.

В общем, ничто из того, что вы делаете внутри них, должно быть тем, что может бросить. Вы не должны выделять память, вызывать другой код или что-то в этом роде. Единственная причина написать конструктор перемещения - это скрыться от других указателей памяти и ссылок на объекты. Вы должны копировать несколько базовых типов и обнулять значения в другом объекте. Эти вещи не должны бросать.

Итак, пока это разрешено, это не очень хорошая идея. Если вы это сделаете, переосмыслите, что вы делаете в своих операциях перемещения.