建構函式和複製建構函式的呼叫時機
阿新 • • 發佈:2019-01-05
關於建構函式和複製建構函式以及過載的複製操作何時會被呼叫,我做了一個小例子來進行測試。
#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方法時返回的是一個指標。