很多时候我们不需要拷贝对象,而是需要”接管”原来的内存,这时候C++提供了一些支持.
[1]右值引用:通过&&来获得右值引用,右值引用只能绑定到一个将要销毁的对象;
[2]std::move(object),可以帮助我们显式的获得一个左值的右值引用.
[3]移动构造函数,只是接管原来的内存,而不会创建新的内存,也不会拷贝元素.同时必须保证源对象处于可析构的状态.
[4]移动赋值运算符号,同上。
[练习1]:对StrVec类构建移动构造函数与移动赋值运算赋值符
StrVec:: StrVec(StrVec && s)//移动右侧对象,确保不再访问
{
elements = s.elements;//接管原来的内存
first_free = s.first_free;
cap = s.cap;
s.elements = s.first_free = s.cap = nullptr;
}
StrVec& StrVec:: operator=(StrVec S)
{
swap(*this, S);
return *this;
}
对于临时变量或者即将被销毁的变量作为实参,将会调用移动构造函数.
======================================================================================