В более эффективном С++ Скотт Мейерс говорит
С++ указывает, что копируется объект, созданный как исключение.
Я полагаю, что если конструктор копирования генерирует исключение по очереди, вызывается std::terminate
, поэтому это хорошая причина для объявления всех конструкторов копирования моих исключений noexcept
(а также, я думаю, не бросать объекты, которые выделяют память из кучи, например std::string
).
Тем не менее я был удивлен, увидев, что стандартная реализация библиотеки, поставляемая с GCC 4.7.1, не определяет эти конструкторы копирования для std::bad_alloc
и std::exception
. Не должны ли они определять их noexcept
?