Tôi đã mã đơn giản sau đây:Constructor/Destructor trật tự cuộc gọi trên đống
class A
{
int a;
public:
A(int a) : a(a) { cout << "Constructor a=" << a << endl; }
~A() { cout << "Destructor a=" << a << endl; }
void print() { cout << "Print a=" << a << endl; }
};
void f()
{
A a(1);
a.print();
a = A(2);
a.print();
}
int main()
{
f();
return 0;
}
Đầu ra là:
Constructor a=1
Print a=1
Constructor a=2
Destructor a=2
Print a=2
Destructor a=2
tôi thấy rằng có hai cuộc gọi destructor với a=2
và không có a=1
khi có một lời gọi hàm tạo cho mỗi trường hợp. Vậy các contructors và destructros được gọi như thế nào trong trường hợp này?
Tại sao bạn mong đợi cuộc gọi hủy với 'a = 1'? – juanchopanza
Bạn có nhận ra giá trị 'A' tạm thời không? Nó không sống rất lâu. –
Tôi đã phát hiện ra nó bây giờ là Kerrek. Wow câu trả lời đang đổ vào. Tôi thấy rõ ràng. Cảm ơn mọi người. – SolidSun