当存在移动构造函数时,c ++ 11中的值是否需要复制ctor? GCC 4.7.1抱怨复制文件被删除,因为我只有一个移动构造函数,但我认为在这种情况下它应该使用移动构造函数。
VeryLargeObject foo(...)
{
VeryLargeObject ret;
//Built object
return ret; //<Error: VeryLargeObject has deleted copy-constructor
}
我不想在我真正需要之前添加copy-constructor。
编辑:
抱歉,我发现我忘记了移动构造函数......我只有移动任务: - (
答案 0 :(得分:3)
不,在这种情况下你应该只需要一个移动构造函数。您的代码有错误(可能是移动构造函数被抑制,或者您实际上没有添加它)或者它是一个GCC错误。它看起来像你的帖子编辑,它可能是前者。
如果您尝试返回除局部变量之外的L值,则需要复制构造函数 。在这种情况下,您可以使用move()
将L值转换为R值,以使其工作(当然,您可能会改变L值的状态)。