Разве 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));
?