移动构造是为了时临时资源所有权发生转移,从而提高效率。
#include <iostream>
using namespace std;
class Pointer{
private:
int *p;
public:
Pointer(int x=0):p(new int(x)){
cout << "构造" << endl;
}
Pointer(const Pointer& pt):p(new int(*pt.p)){
cout << "拷贝构造" << endl;
}
Pointer(Pointer&& pt){
cout << "移动构造" << endl;
p = pt.p;
pt.p = NULL;
}
Pointer& operator=(const Pointer& pt){
cout << "拷贝赋值" << endl;
if(this != &pt){
Pointer obj(pt);
swap(obj.p,p);
}
return *this;
}
Pointer& operator=(Pointer&& pt){
cout << "移动赋值" << endl;
if(this != &pt){
p = pt.p;
pt.p = NULL;
}
return *this;
}
int *getptr(){
return p;
}
~Pointer(){
if(p!=NULL){
delete p;
p = NULL;
}
cout << "~析构" << endl;
}
};
Pointer getP(){
return Pointer(10);
}
int main(){
Pointer p = getP();
cout << p.getptr() << endl;
Pointer p1(p);
Pointer p2(move(p));
cout << p.getptr() << endl;
return 0;
}