Подтвердить что ты не робот

Удалить 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));

?

4b9b3361

Ответ 1

delete ptr будет выполнять перегрузочное разрешение для operator delete, поэтому он не может вызывать глобальный ::operator delete

Но в остальном, да. Оператор delete вызывает соответствующий деструктор, если он есть, а затем вызывает operator delete.