拷贝构造函数的理解
1.拷贝构造函数与构造函数类似,当没有自定义拷贝构造函数的时候,编译器会定义一个拷贝构造函数。
当类对象没有初始化的时候,通过赋值运算符的形式,也是调用拷贝构造函数。
Test aa(100);
Test bb = aa;//调用拷贝构造函数Test aa(100);
Test bb(200);
bb = aa;//此时因为对象bb已经初始化,此时调用的是赋值运算符
2.当类成员没有指针的时候,使用编译器自带的默认构造函数就可以(浅拷贝即可),当类成员有指针的时候,需要自定义拷贝构造函数,实行深拷贝。
3.拷贝构造函数的参数为引用,不能是值传递,也不能是指针传递,参考该文。
如果是值传递的话,相当于在不停的调用拷贝构造函数,造成栈溢出。参考该文。
假设是值传递;Test(Test cc);Test aa(100);
Test bb = aa;//相当于 bb.Test(aa),此时aa会拷贝给临时变量cc相当于 cc.Test(aa);//此时aa又会拷贝给临时变量cccc.Test(aa);//这个过程不断的重复,造成栈溢出