Что такое nothrow delete в C++?

эта страница MSDN упоминает, что есть версии nothrow new и delete. nothrow new довольно известная вещь-возвращает null вместо того, чтобы вызывать исключение, если выделение памяти не удается. Но что такое nothrow delete там упоминается?

1 ответов


они, вероятно, ссылаются на необработанные функции выделения памяти operator new и operator delete.

при вызове определенной версии размещения new-expression (т. е. new-expression с дополнительными параметрами; все они официально называются размещение формы new) и функция выделения памяти operator new успешно, но процесс терпит неудачу позже по какой-то другой причине (бросает конструктор), реализация должна прервать процесс и автоматически освободите выделенную память, вызвав соответствующую версию operator delete. "Соответствующая версия"operator delete в данном случае-это версия, которая имеет тот же набор параметров, как operator new функция, ранее используемая для выделения памяти (за исключением самого первого параметра, конечно).

это относится к nothrow версия operator new Как хорошо. Когда вы используете nothrow форма нового выражения, она вызывает nothrow версия operator new а затем создает объект в выделенная память. Если конструктор терпит неудачу( выбрасывает), реализация нового выражения освобождает выделенную память с помощью nothrow версия operator delete. Это в основном единственная причина для этой версии operator delete существовать.

иными словами,nothrow версия для очень специфических внутренних целей. Обычно вы не должны хотеть называть его сами и, возможно, вам действительно не нужно знать о его существовании. Однако, стоит знать это по причинам, описанным выше, всякий раз, когда вы создаете свою собственную версию operator new дополнительные параметры, это всегда хорошая идея, чтобы обеспечить соответствующую версию operator delete с тем же набором дополнительных параметров.