C++ 拷贝构造和移动构造函数
今天群里有人问右值引用怎么用?我看到了,也不能完全回答出来,因为我知道在移动构造函数中使用右值引用,移动构造函数的应用场景是什么呢?
代码
class demo{
public:
demo(int a):m_i(new int(a)){
std::cout <<"demo()\n";
}
demo(const demo& ref):m_i(new int(*ref.m_i+1)){
std::cout<<"copy\n";
}
demo(demo &&ref):m_i(ref.m_i){
ref.m_i = nullptr;
std::cout<<"move\n";
}
~demo(){
std::cout<<"~demo()\n";
}
public:
int *m_i;
};
demo getDemo(){
demo d = demo(1);
return d;
}
int main(){
demo obj = getDemo();
//demo a = obj;
std::cout<<*obj.m_i<<" obj m_i\n";
return 0;
}
代码分析
对于复制构造函数以及调用描述见这篇文章。
移动构造函数出现,所有的拷贝构造函数全部变成了移动构造函数。
这样编译g++ -g lionel.cpp -o lionel -fno-elide-constructors就会出现下面的结果:
demo()
move
~demo()
move
~demo()
move
~demo()
1 obj m_i
~demo()
博客围绕C++拷贝构造和移动构造函数展开。有人询问右值引用用法,作者虽知其在移动构造函数中使用,但对应用场景不太明确。还给出相关代码及编译结果,且提到移动构造函数出现后拷贝构造函数的变化。
1168

被折叠的 条评论
为什么被折叠?



