假设我在头文件中有以下类:
//Minimized example to show the issue
class Foo
{
public:
Foo(); //implemented in .cpp
Foo(Foo const &foo) = delete;
Foo(Foo &&foo); //implemented in .cpp
private:
//member variables
}
我编写了一个函数,它接受Foo &&
作为参数和emplaces
它到一套。看起来像这样:
void bar(Foo &&foo)
{
//std::set<Foo> mySet defined elsewhere
mySet.emplace(foo); //Compiler complains using deleted copy ctor
}
编译器会抱怨我的代码使用了=delete
&#39; d copy ctor,但是
如果我将函数体更改为:
mySet.emplace(std::move(foo));
一切都很好。
为什么在foo上调用std::move
可以解决这个问题?
我正在使用Windows 10和VS 2017。
我找到了std::unordered_map::emplace issue with private/deleted copy constructor,但那是使用gcc,可能已经过时了。
提前致谢。