std :: set :: emplace抱怨删除的拷贝构造函数

时间:2017-09-19 00:49:04

标签: c++ c++11 visual-c++ c++14

假设我在头文件中有以下类:

//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,可能已经过时了。

提前致谢。

0 个答案:

没有答案