Có delete ptr
khác với operator delete(ptr)
chỉ trong số này, rằng delete
gọi ptr
destructor? Hay nói cách khác, hiện delete ptr
đầu tiên có phải là một destructor của ptr
và sau đó operator delete(ptr)
để cấp phát bộ nhớ miễn phí? Sau đó, delete ptr
về mặt kỹ thuật tương đương với những điều sau đây:Xóa và xóa toán tử (và con trỏ trống)
T * ptr = new T;
//delete ptr equivalent:
ptr->~T();
::operator delete(static_cast<void *>(ptr));
?
Vâng, đó là sự khác biệt duy nhất, ngoài thực tế là bạn có thể quá tải 'toán tử xóa'. –