Должны ли конструкторы перемещения быть исключениями? - PullRequest
16 голосов
/ 12 февраля 2012

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

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

1 Ответ

21 голосов
/ 12 февраля 2012

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

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

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

...