В чем смысл вызвания деструктора после ::operator delete
Исправьте, если не прав:
В обычном delete после его вызова происходит автоматическая деструктуризация классовых элементов, а после этого отправляет сообщение компилятору что данный блок памяти свободен и его можно заполнить.
Но в operator delete(addr) мы передаем адрес блока который очиститься. По его вызову исполняемый файл запросит у ОС очистку блока, но не вызовет классовый деструктор. Так вот, в чем смысл вызова классового деструктора? Ведь если блок памяти будет очищен, то и память в блоке будет свободна?
Ответы (1 шт):
При удалении объекта должен вызываться деструктор, так как объект может быть нетривиальным. Деструктор содержит код, и он не будет вызван, если процесс удаления объекта будет состоять из простой пометки ОС, что блок памяти свободен. А код в деструкторе может содержать важные вещи, в том числе освобождение ресурсов (файлов, памяти), сохранение инвариантов.