核心:
移动构造的主要方式是在构造函数中直接复制原临时对象的指针,即新的对象与原对象指向同一块内存单元,实际上是浅层复制。然后将原临时对象的指针置为空指针,此时就避免了多个指针指向同一块内存空间带来的风险。
/*----------------------
功能:移动构造函数
运行结果:
Calling constructor...
0
Calling destructor...
Author: zhang Kaizhou
Date: 2019-4-5 18:35:42
----------------------*/
#include <iostream>
using namespace std;
class IntNum{
private:
int * pNum;
public:
IntNum(int x = 0):pNum(new int(x)){ cout << "Calling constructor..." << endl; } // 含参构造函数
IntNum(const IntNum & n):pNum(new int(* n.pNum)){ cout << "Calling copy constructor..." << endl; } // 复制构造函数
IntNum(IntNum && n):pNum(n.pNum){ // 移动构造函数,直接复制原来临时对象的指针,即与原临时对象指向同一块内存
n.pNum = NULL; // 将临时对象的指针置空
cout << "Calling move constructor..." << endl;
}
~IntNum(){ delete pNum; cout << "Calling destructor..." << endl; } // 析构函数
int getInt(){ return * pNum; }
};
IntNum getNum(){ // 返回一个IntNum类的临时对象
IntNum a;
return a;
}
int main(){
cout << getNum().getInt() << endl;
return 0;
}