0
即时覆盖对象时,试图理解构造函数和析构函数调用的顺序。C++ - 覆盖期间调用析构函数时的类成员
我的代码是:
class A
{
public:
A(int n): x(n)
{ cout << "A(int " << n << ") called" << endl; }
~A()
{ cout << "~A() with A::x = " << x << endl; }
private:
int x;
};
int main()
{
cout << "enter main\n";
int x = 14;
A z(11);
z = A(x);
cout << "exit main" << endl;
}
-
的输出是:
enter main
A(int 11) called
A(int 14) called
~A() with A::xx = 14
exit main
~A() with A::xx = 14
-
为什么是A :: XX = 14时的析构函数叫什么名字?难道不是11?
但X的第一次印刷的析构函数中发生的,因此,如果第一个实例A还没有被销毁,不应该x仍然是11 – pulekies
你知道每个对象都保存着一个单独的成员变量副本吗?你没有参考或静态的,只是一个普通的成员。 –
第一个具有A :: xx = 14的'〜A()是临时变量的析构函数,因为它已经完成了将'z'改为14的操作。然后main结束,并且'z'被销毁,显示第二个' 〜A()与A :: xx = 14'。 –