我们先来看一段例子,一个简单的函数返回值场景
#include <iostream>
using namespace std;
class Moveable {
public:
Moveable():h(new int(3)) {
cout << "construct " << endl;
}
~Moveable() {
delete h;
}
Moveable(const Moveable& m): h(new int(*m.h)) {
cout << "copy constructor" << endl;
}
/* 转移构造
Moveable(Moveable&& m): h(m.h) {
cout << "move constructor" << endl;
m.h = nullptr;
}
*/
int* h;
};
Moveable GetTemp() {
Moveable tmp;
return tmp;
}
int main(int argc, char** argv) {
Moveable a = GetTemp();
return 0;
}
如果正常的编绎,我这边使用的是clang-700.1.81,
编绎命令:g++ -std=c++11 demo_3.cpp -o demo_3
执行结果如下: