拷贝构造函数

拷贝构造函数 

  • 用一个已经存在的对象去初始化另一个对象的时候。编译器调用拷贝构造函数。如果未实现拷贝构造函数,将会自动生成一个拷贝构造函数,浅拷贝
  • 如果对象的成员变量确实引用了外部资源(在堆区申请过空间),必须实现深拷贝构造函数而不能去依赖编译器为我们自动生成的浅拷贝构造函数。
  • 拷贝构造函数必须传入对象的引用或指针,不可以传入对象本身。

否则会发生实参到形参的复制,造成死递归。为了调用拷贝构造函数,必须拷贝实参;为了拷贝实参,而又需要调用拷贝构造函数。自己调用自己称为递归,但是没有终止条件的递归就是死递归。


赋值运算符的重载

  • 在对象进行赋值操作时进行调用;
  • 如果没有实现赋值运算符重载函数,编译器会自己生成一个浅拷贝的赋值运算符重载函数
  • 防止自赋值
  • 若参数为const类型的引用,且返回值也为引用,那返回值必须为const类型的引用。
  • 对于赋值运算符,编译器会进行优化
拷贝构造函数
图1  示意图