我是移动构造函数的新手,并且对VS2010的行为很困惑。 我设计了一个移动构造函数(A类),据我所知,它是这样的:
A(A&& input) {some code}
当我使用list的emplace并放置A类的实例时:
mylist.emplace(a);
我的移动构造函数未被调用,而是调用非const复制构造函数:
A(A& input) {the same code as move constructor}
另一方面,当我这样做时:
mylist.emplace(A(2));
我的移动构造函数就像它应该的那样被调用。所以,我的问题是:
提前致谢了。
答案 0 :(得分:2)
mylist.emplace(a);
这里a
是一个l值,因此它被复制而不是移动。你需要明确move
:
mylist.emplace(std::move(a));
是的,行为是正确的。