Кто-нибудь может объяснить, что произойдет, если новый перегружен, но соответствующее удаление не загружается в C ++?
Это проблема, только когда конструкция объекта выдает исключение, и это описано в C ++ 11 5.3.4 / 18:
Если никакая однозначная функция соответствия не может быть
обнаружено, что распространение исключения не приводит к освобождению памяти объекта. [Примечание: это уместно
когда вызываемая функция выделения не выделяет память; в противном случае, это может привести к памяти
протечь. —Конечная записка]
Пример:
T * p = new (true, 'x', Blue) T("Jim");
Если конструктор T
броски, нам нужна перегрузка operator delete(void *, bool, char, enum Color)
либо в области имен пространства или в качестве статического члена T
и если эта функция не существует, то никакая функция освобождения не вызывается.
Как отмечается в примечании, в случае новых функций размещения, которые по существу не используются, это не может быть проблемой. Однако, если функция распределения выполняет нетривиальную работу, соответствующей функции очистки не будет.
Других решений пока нет …