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