Định nghĩa của some_class
là:Hành vi của cuộc gọi rõ ràng để Destructor
class some_class
{
// stuff
public:
~some_class()
{
delete dynamic_three;
}
private:
classA one;
classB two;
classC* dynamic_three;
}
Khi thời gian tồn tại của một đối tượng kết thúc, sự tàn phá của nó là: (1) để gọi destructor của nó và (2) để tiêu diệt subobjects của nó trong cùng thứ tự mà chúng được khai báo trong định nghĩa lớp (= vị trí trong bộ nhớ).
Nhưng, nếu tôi có một cái gì đó như thế:
auto* ptr = new some_class();
// more stuff
ptr->~some_class(); // l. X
Bước (2) cũng được thực hiện? Tôi có nghĩa là, trong dòng X, là destructors của subobjects cũng được gọi là hoặc chỉ được thực hiện cơ thể của destructor some_class
's?
Um, no, destructor không có bộ nhớ được cấp phát miễn phí. Toán tử 'delete' thực hiện điều đó. –