2.copy构造函数和拷贝操作符‘=’的区别

时间:2021-12-18 19:24:31

copy构造函数用来“以同型对象初始化自我对象”,copy操作符‘=’被用来“从一个同型对象中拷贝其值到自我对象”,下面请看一段代码:

#include <iostream>
using namespace std;

class B{

public:
explicit B(const B& b); // 拷贝构造函数
B& operator=(const B& b); // 操作符重载实现copy赋值操作符“=”
};

int main()
{
B bObj1;
B bObj2(bObj1); // 调用了拷贝构造函数
bObj1 = bObj2; // 调用了 copy赋值操作符重载函数“=()”

// 这句代码并不是使用了“=”操作符,而是调用了拷贝构造函数
B bObj3 = bObj2;
return 0;
}
B bObj3 = bObj2并没有使用“=”操作符,而是调用了拷贝构造函数,在对象定义的时候如果使用“=”进行赋值,并不是值的拷贝,而是初始化自我对象,所以使用了拷贝构造函数,并没有使用“=”操作符重载函数。

拷贝构造函数是一个非常重要的函数,当我们平时进行函数实参传入对象的时候都会发生拷贝构造函数的调用,看如下代码:

#include <iostream>
using namespace std;

class B{

public:
explicit B(const B& b); // 拷贝构造函数
B& operator=(const B& b); // 操作符重载实现copy赋值操作符“=”
};

void showName(B b)
{

}
int main()
{
B bObj1;
showName(bObj1); // 会发生一次拷贝构造函数的调用
return 0;
}
这种方法我们把它叫做 值传递,因为要条用拷贝构造函数,所以效率会比较低,因此工程中一般使用 引用传递方式来处理代码。