C++中的复制控制主要有三种:是复制构造函数、赋值操作符、析构函数
C++支持两种初始化的形式:直接初始化和复制初始化。复制初始化使用的是"="号,而直接初始化将初始化式放在圆括号中。
当用于类类型的对象的时候,初始化的复制形式和直接形式有所不同:直接初始化“()”直接调用与实参相匹配的构造函数,复制初始化"="总是调用复制构造函数。复制初始化首先使用指定的构造函数创建一个临时对象,然后用复制构造函数将临时对象复制到正在创建的对象。
对于类对象,只有指定单个实参或显式创建一个临时对象用于复制是才使用复制初始化。
例子:
String A = “I am learning C++”; //复制初始化
String A1 = String(); //复制初始化
String B("I am also learning C++"); //直接初始化
String B2; //直接初始化
支持初始化的复制形式主要是为了和C的用法进行兼容
注意explicit可以禁止由构造函数定义的隐式转换,但是允许用户为了转化而显式的调用构造函数
复制构造函数的基本形式:
ClassName(const ClassName & t); 注意一定要进行全部的复制,如果是继承的,要注意复制基类的成员变量,另外还要注意防止进行自我复制的问题(if(this == & t)),注意数组要进行单独的复制
禁止复制的问题(iostream):声明一个private的复制构造函数,但是不对其进行定义,如果使用将导致编译/链接的失败。
赋值操作符==>处理的是 object1 = object2的情况
类的赋值函数应该为成员函数
ClassName & operator = (const ClassName &)
{
...
return *this;//返回reference to this
}
=================================================================================
关键字:复制控制、直接初始化、复制初始化、自我复制、explict
参考C++Primer和EffectiveC++
阅读(758) | 评论(0) | 转发(0) |