仅当准备用按值传递的方式传递类对象时,才需要拷贝构造函数。
就是说按值传递的时候,会调用到拷贝构造函数。
验证:
#include <iostream>
using namespace std;
class HowMany{
static int countObject;
public:
HowMany(){
countObject++;
cout<<"create a obj:"<<countObject<<endl;
}
HowMany(const HowMany& x){
//countObject++;
cout<<"copy constructor create a obj:"<<countObject<<endl;
}
~HowMany(){
countObject--;
cout<<"delete a obj:"<<countObject<<endl;
}
void Print(){
cout<<"print countObject:"<<countObject<<endl;
}
};
int HowMany::countObject = 0;
HowMany func(HowMany x){
x.Print();
return x;
}
int main(){
HowMany A;
A.Print();
HowMany B = func(A);
B.Print();
return 1;
}
输出:
create a obj:1
print countObject:1
copy constructor create a obj:1
print countObject:1
copy constructor create a obj:1
delete a obj:0
print countObject:0
delete a obj:-1
delete a obj:-2
深拷贝与浅拷贝和拷贝构造函数也没啥关系:
如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝,反之,没有重新分配资源,就是浅拷贝。