复制构造函数

这个算是c++非常基础的东西,感觉知道有这个东西,但里面的原因不知道,有点蛋疼,今天又翻开了曾经看过的c++primer,看的时候感觉都看过

只有单个形参,而且该形参是对本类类型对象的引用(常用 const 修饰),这样的构造函数称为复制构造函数。与默认构造函数一样,复制构造函数可由编译器隐式调用。复制构造函数可用于:

• 根据另一个同类型的对象显式或隐式初始化一个对象。
• 复制一个对象,将它作为实参传给一个函数。//隐式调用
• 从函数返回时复制一个对象。//隐式调用
• 初始化顺序容器中的元素。
• 根据元素初始化式列表初始化数组元素

当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接初始化
直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数。复制初始
化首先使用指定构造函数创建一个临时对象(第 7.3.2 节),然后用复制构造
函数将那个临时对象复制到正在创建的对象

string null_book = "9-999-99999-9"; // copy-initialization
string dots(10, '.'); // direct-initialization
string empty_copy = string(); // copy-initialization
string empty_direct; // direct-initialization

null_book首先调用构造函数参数为字符串生成一个临时对象,然后调用复制构造函数初始化null_book为临时对象的副本

和赋值操作符的区别:赋值操作符只是对=的重写不是构造函数,而复制构造函数是构造函数

一般情况下不需要重新定义复制构造函数和赋值操作符,但以下清空除外:

这样的类经常有一个,数据成员是指针,或者有成员表示在构造函数中分配的其他资源。而另一些类在创建新对象时必须做一些特定工作。这两种情况下,都必须定义复制构造函数。
一般需要复制构造函数的也需要赋值操作符,原因一样有可能成员函数是指针类型,但生成另一个对象时只是赋值了指针但没有分配相应的内存。
具体不懂可以再查阅c++primer

原文地址:https://www.cnblogs.com/zzyoucan/p/3674364.html