标签:
#include<iostream>}
此题的答案为:
A
A
B
~B
~A
~A
~A
仔细发现你可能会看出来多析构了一次A,其实在B b(a); 时,先调用了一次A构造函数,然后通过copy constructor构造b的成员对象_a(看清楚_a是一个A对象,并不是普通数据成员),由于没有显示声明A的默认拷贝构造函数,就默认调用编译器提供的默认拷贝构造函数。最后调用B的构造函数。
若将类A改成:
class A
{
public:
A() { cout<<"A"<<endl; }
A(A &temp)
{
printf("A copy create!\n");
}
~A() { cout<<"~A"<<endl; }
};
那么结果为
A
A
A copy create!
B
~B
~A
~A
~A
标签:
原文地址:http://blog.csdn.net/u014082714/article/details/43193007