深层复制: 当被复制的对象数据成员是指针类型时,不是复制该指针成员本身,而是将指针所指对象进行复制。 移动构造: 当临时对象在被复制后就不被利用了。我们可以把对象的资源直接移动,这样就避免了多余的复制操作。
#include<iostream> using namespace std; class IntNum { public: IntNum(int x = 0) : xptr(new int(x)){ //构造函数 cout << "Calling constructor..." << endl; } IntNum(const IntNum & n) : xptr(new int(*n.xptr)){//复制构造函数 cout << "Calling copy constructor..." << endl; //&&是右值引用 //函数返回的临时变量是右值 } IntNum(IntNum && n): xptr( n.xptr){ //移动构造函数 n.xptr = nullptr; cout << "Calling move constructor..." << endl; } ~IntNum(){ //析构函数 delete xptr; cout << "Destructing..." << endl; } private: int *xptr; }; //返回值为IntNum类对象 IntNum getNum() { IntNum a; return a; } int main() { cout << getNum().getInt() << endl; return 0; }运行结果: Calling constructor… Calling move constructor… Destructing… 0 Destructing…