C++拷贝构造函数
什么是拷贝构造函数
拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一直,它必须的一个参数是本类型的一个引用变量
拷贝构造函数调用的时机
牵扯到需要传递对象,就会牵扯到拷贝构造函数
class CExample
{
private:
int a;
public:
//构造函数
CExample(int b)
{
?a = b;
}
//拷贝构造
CExample(const CExample& C)
{
?a = C.a;
?cout<<"copy"<<endl;
}
//析构函数
~CExample()
{
?cout<< "delete: "<<a<<endl;
}
void Show ()
{
? ?cout<<a<<endl;
}
};
//全局函数,传入的是对象
void g_Fun(CExample C)
{
cout<<"test"<<endl;
}
int main()
{
CExample test(1);
//传入对象
g_Fun(test);
return 0;
}
拷贝构造函数调用过程
1.test对象传入形参时,先产生一个临时变量,就叫C
2.然后调用拷贝构造函数把test传给C,就相当于传的参数不是test,而是C
3.g_fun()执行完成后,析构C
默认拷贝构造函数
只是进行简单的参数传递,例如int,float等基本数据类型,不包括++,--,静态成员,以及所有的动态的成员等
浅拷贝
对象复制时,只对对象中的数据成员进行简单的赋值,默认拷贝构造函数执行的也是浅拷贝。大多情况下“浅拷贝”已经能很好地工作了,但是一旦对象存在了动态成员,那么浅拷贝就无法完成复制
深拷贝
自己写的拷贝构造函数,动态变量要自己去申请
|