当存在移动构造函数时,c++11中的按值返回是否需要复制ctor?GCC 4.7.1抱怨说复制-ctor是隐式删除的,因为我只有一个移动构造函数,但是我认为在这种情况下它应该使用移动构造函数。
VeryLargeObject foo(...)
{
VeryLargeObject ret;
//Built object
return ret; //<Error: VeryLargeObject has deleted copy-constructor
}我不想添加复制构造函数,直到我真正需要它。
编辑:
抱歉我忘了移动构造器..。我只有搬家任务:-(
发布于 2013-07-26 21:25:08
不,在这种情况下应该只需要一个move构造函数。要么您的代码有一个bug (可能是move构造函数被抑制了,或者您实际上没有添加它),要么是GCC错误。它看起来像是根据你的帖子编辑,可能是前者。
如果试图返回本地变量以外的L值,则需要复制构造函数。在这种情况下,您可以使用move()将L值转换为R值,以使其正常工作(当然,您意识到可能会更改L值的状态)。
https://stackoverflow.com/questions/17888347
复制相似问题