关于构造函数和复制构造函数以及重载的复制操作何时会被调用,我做了一个小例子来进行测试。
#include <iostream>
using namespace std;
class AAA
{
public:
AAA()
{
cout<<"constrctor"<<endl;
}
AAA(const AAA & a)
{
cout<<"copy constrctor"<<endl;
}
AAA(int i)
{
cout<<"paramter constrctor"<<endl;
}
AAA& operator =(const AAA & a)
{
cout<<"copy function"<<endl;
return *this;
}
};
int main()
{
cout<<"a1:";
AAA a1(3);
cout<<"a2:";
AAA a2 = AAA(4);
cout<<"a3:";
AAA a3=AAA();
cout<<"a4:";
AAA a4(a2);
cout<<"a5:";
AAA a5;
a5=a3;
cout<<"a6:";
AAA a6=a5;
cout<<"a7:";
AAA *a7=new AAA(1);
cout<<"a8:";
AAA *a8=new AAA();
return 0;
}
由此可以看出几点:
1、AAA a();
和AAA a=AAA();
是完全等价的(当然AAA a(1);
和AAA a=AAA(1);
也是相同的);
2、对于
AAA a5;
AAA a6=a5;
这种操作,实际上是等价于AAA a6(a5);
,实际上是会调用复制构造函数。
3、使用new方法时返回的是一个指针。