前言
为了更好的理解移动构造函数,你需要:
- 理解右值引用。不明白的童鞋们请查看我的上一篇博客右值引用
2.C++的拷贝构造函数相关知识。《C++ Primer 5th》第13章
何为移动构造函数?
在讲移动拷贝构造函数之前,大家不妨先看看我这个例子:
首先,我定义一个名叫boVector的类。这个类的功能很简单,就是一个数组。我给这个类定义了一个拷贝构造函数,代码如下:
class boVector
{
private:
double *arr_;
int size;
public:
boVector(boVector &rhs)// copy constructor 拷贝构造函数
{
// deep copy 深拷贝
size = rhs.size;
arr_ = new double[size];
for (int i = 0; i < size; ++i)
arr_[i] = rhs.arr_[i];
}
}
我这个代码应该说没什么可挑剔的。我都在堆区开辟了新的内存空间存放拷贝数据了,也即用深拷贝将一个boVector对象的数据拷贝给另一个boVector对象。
不过,请大家思考一个问题?如果size很大,上万个数据?深拷贝将会导致很大的内存和时间开销,让程序的效率变得低下。
于是乎,