先看下面的代码,需要注意的是
- b 调用的是 拷贝构造函数
- c 调用的是 拷贝赋值函数
为什么会有这种差别呢,我们首先来区别一下两个函数的定义:
- 拷贝构造函数:以同类型对象初始化自我
- 拷贝复制函数:从另一个同类型对象拷贝其值到自我
看了定义我们就理解了问题所在,b 这个对象没有被创建,所有一定会有一个构造函数会被调用,而不能赋值
c这个对象已经存在,不能再重新构造,只能调用赋值操作
#include <iostream>
class A
{
private:
int data;
public:
A() = default;
explicit A(int a) : data(a) {}
A(const A& a){
std::cout << "拷贝构造函数!!\n";
data = a.data;
}
A& operator=(const A& a){
std::cout << "拷贝赋值构造函数!!\n";
data = a.data;
return *this;
}
~A(){}
};
int main(){
A a(5);
A b = a;
A c;
c = a;
return 0;
}