Оператор «размещение нового» объявляется так:
void* operator new (std::size_t size, void* ptr) noexcept;
Но хотя это не связано с каким-либо фактическим распределением, поэтому исключения с плохим распределением устраняются, все же возможно, что указатель указывает на неправильное местоположение, и в этом случае можно было бы ожидать получить диапазон или ошибку переполнения/опустошения, но не будет тот факт, что он был объявлен как noexcept
, вместо этого просто прекратит выполнение?
Также означает ли это, что до размещения С++ 11 новый вызовет и попытается обработать std::unexpected
в случае std::set_unexpected
вместо прямого сбоя?
Не должна ли быть бросковая перегрузка размещения новых "на всякий случай"?
*ptr
. Он просто вызывается новым выражением, которое всегда вызывает функцию распределения, и это функция отсутствия распределения. Построение объекта выполняется компилятором, оценивающим новое выражение (вне вызова этой функции). - person dyp   schedule 02.11.2014operator new
функции. Она вызывается компилятором после завершения этой функции как часть оценки нового выражения. - person dyp   schedule 02.11.2014operator new
, а затем вызывает конструктор. В новом случае размещения, который использует этоoperator new
,operator new
само по себе абсолютно ничего не делает и не может дать сбой, но новое выражение может по-прежнему иметь неопределенное поведение. - person aschepler   schedule 02.11.2014