2012-05-13 30 views
12

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)); 

?

+3

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'. –

Trả lời

8

delete ptr sẽ làm độ phân giải quá tải cho operator delete, vì vậy nó có thể không gọi toàn cầu ::operator delete

Nhưng nếu không, vâng. Toán tử delete gọi destructor có liên quan, nếu có, và sau đó gọi operator delete.

Các vấn đề liên quan