На этой странице MSDN упоминается, что есть нечеткие версии new
и delete
. nothrow new
- довольно известная вещь - возвращает null вместо того, чтобы бросать исключение, если сбой памяти не выполняется. Но что там упомянуто nothrow delete
?
Что такое nothrow delete в С++?
Ответ 1
Они, вероятно, ссылаются на функции выделения необработанных памяти operator new
и operator delete
.
Когда вы вызываете определенную версию нового выражения (например, новое выражение с дополнительными параметрами, все они официально называются формами размещения new
), а функция выделения памяти operator new
выполняется успешно, но процесс не выполняется позже по какой-либо другой причине (конструктор бросает), реализация должна прервать процесс и автоматически освободить выделенную память, вызвав соответствующую версию operator delete
. "Соответствующая версия" operator delete
в этом случае - это версия, которая имеет тот же набор параметров, что и функция operator new
, ранее использовавшаяся для выделения памяти (за исключением самого первого параметра, конечно).
Это относится к версии nothrow
operator new
. Когда вы используете форму nothrow
нового выражения, она вызывает nothrow
версию operator new
, а затем создает объект в выделенной памяти. Если конструктор выходит из строя (бросает), реализация нового выражения освобождает выделенную память с помощью nothrow
версии operator delete
. Это, по сути, единственная причина существования этой версии operator delete
.
Другими словами, версия nothrow
operator delete
существует для очень специфических внутренних целей. Обычно вы не должны называть его самим, и, может быть, вам не нужно знать о его существовании. Однако стоит знать, что по причинам, описанным выше, всякий раз, когда вы создаете собственную версию operator new
с дополнительными параметрами, всегда рекомендуется предоставить соответствующую версию operator delete
с тем же набором дополнительных параметров.