copy构造函数被用来“以同型对象初始化自我对象”,而赋值操作符被用来“从另一个同型对象中拷贝其值到自我对象”。
需要格外注意的是copy构造函数也是构造函数,因此它的调用时机必须是之前的对象并不存在的情况,而赋值操作符正好相反,既然是“从另一个同型对象中拷贝其值到自我对象”,那在调用的时机,就必须同时存在两个已经存在的对象。
举个例子:
class test{};//定义一个类,系统自动生成其copy构造函数和赋值运算
int main()
{
test t1;
test t2(t1);//copy构造函数
t2=t1;//赋值运算符
test t3=t2;//copy构造函数
}
可见,调用的是copy构造函数还是赋值运算符跟“=”是否出现并没有关系,唯一的准则是对象之前是否存在。