В чем смысл вызвания деструктора после ::operator delete

Исправьте, если не прав: В обычном delete после его вызова происходит автоматическая деструктуризация классовых элементов, а после этого отправляет сообщение компилятору что данный блок памяти свободен и его можно заполнить.

Но в operator delete(addr) мы передаем адрес блока который очиститься. По его вызову исполняемый файл запросит у ОС очистку блока, но не вызовет классовый деструктор. Так вот, в чем смысл вызова классового деструктора? Ведь если блок памяти будет очищен, то и память в блоке будет свободна?


Ответы (1 шт):

Автор решения: PavelMind

При удалении объекта должен вызываться деструктор, так как объект может быть нетривиальным. Деструктор содержит код, и он не будет вызван, если процесс удаления объекта будет состоять из простой пометки ОС, что блок памяти свободен. А код в деструкторе может содержать важные вещи, в том числе освобождение ресурсов (файлов, памяти), сохранение инвариантов.

→ Ссылка