Что такое nothrow, удаляют в C++?

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

10
задан sharptooth 25 December 2009 в 07:53
поделиться

1 ответ

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

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

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

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

.
18
ответ дан 3 December 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: