Что произойдет, если новый перегружен, но соответствующее удаление не загружено?

Кто-нибудь может объяснить, что произойдет, если новый перегружен, но соответствующее удаление не загружается в C ++?

4

Решение

Это проблема, только когда конструкция объекта выдает исключение, и это описано в C ++ 11 5.3.4 / 18:

Если никакая однозначная функция соответствия не может быть
обнаружено, что распространение исключения не приводит к освобождению памяти объекта. [Примечание: это уместно
когда вызываемая функция выделения не выделяет память; в противном случае, это может привести к памяти
протечь. —Конечная записка]

Пример:

T * p = new (true, 'x', Blue) T("Jim");

Если конструктор T броски, нам нужна перегрузка operator delete(void *, bool, char, enum Color)либо в области имен пространства или в качестве статического члена Tи если эта функция не существует, то никакая функция освобождения не вызывается.

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

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]