Удалить vs operator delete (и указатель void)
Разве delete ptr
отличается от operator delete(ptr)
только тем, что delete
вызывает ptr
деструктор? Или, другими словами, delete ptr
сначала вызывает деструктор ptr
, а затем operator delete(ptr)
для освобождения выделенной памяти? Тогда delete ptr
технически эквивалентно следующему:
T * ptr = new T;
//delete ptr equivalent:
ptr->~T();
::operator delete(static_cast<void *>(ptr));
?
Ответы
Ответ 1
delete ptr
будет выполнять перегрузочное разрешение для operator delete
, поэтому он не может вызывать глобальный ::operator delete
Но в остальном, да. Оператор delete
вызывает соответствующий деструктор, если он есть, а затем вызывает operator delete
.