移动构造函数的调用时机是:用同类的右值对象初始化新对象。
当前类的左值对象(有名称,能获取其存储地址的实例对象)初始化同类对象时,使用move() 函数可以调用移动构造函数。
move( )功能:将某个左值强制转化为右值。
//函数会返回 arg 对象的右值形式
move(arg) //arg 表示指定的左值对象
#include <iostream>
using namespace std;
class movedemo{
public:
movedemo():num(new int(0)){
cout<<"construct!"<<endl;
}
//拷贝构造函数
movedemo(const movedemo &d):num(new int(*d.num)){
cout<<"copy construct!"<<endl;
}
//移动构造函数
movedemo(movedemo &&d):num(d.num){
d.num = NULL;
cout<<"move construct!"<<endl;
}
public: //这里应该是 private,使用 public 是为了更方便说明问题
int *num;
};
int main(){
movedemo demo;
cout << "demo2:\n";
movedemo demo2 = demo;
//cout << *demo2.num << endl; //可以执行
cout << "demo3:\n";
movedemo demo3 = std::move(demo); //将左值对象用move()转为右值对象
//此时 demo.num = NULL,因此下面代码会报运行时错误
//cout << *demo.num << endl;
return 0;
}