拷贝构造函数与拷贝赋值运算符的调用时机?
类的定义
class CMatrix
{
public:
CMatrix(); // 默认构造函数
CMatrix(const CMatrix& rhs); // 拷贝构造函数
CMatrix& operator=(const CMatrix& rhs); // 拷贝赋值运算符
...
};
调用拷贝构造函数的情形
CMatrix m1; // 调用默认构造函数
CMatrix m2(m1); // 调用拷贝构造函数(有新对象被创建)
CMatrix m1; // 调用默认构造函数
CMatrix m2 = m1; // 调用拷贝构造函数(有新对象被创建)
调用拷贝赋值运算符号的情形
CMatrix m1; // 调用默认构造函数
CMatrix m2; // 调用默认构造函数
m2 = m1; // 调用拷贝赋值运算符(没有新对象被创建)
总结
当赋值运算符“=”的左边有新对象被创建时,调用拷贝构造函数,反之,调用拷贝赋值运算符