C2280 - 试图引用一个已删除的功能是我收到错误时,我试图从initializer_list构造一个std ::地图>错误构建的std ::地图<T,的unique_ptr <S>>从initializer_list
我做了一个最简单的代码(见下文)代表我的问题:
#include <string>
#include <map>
#include <memory>
using namespace std;
int main() {
map<string, unique_ptr<int>> MyMap{
{ "first" ,make_unique<int>(6) },
{ "second",make_unique<int>(22) },
{ "third" ,make_unique<int>(86) }
};
}
所以我知道的unique_ptr无法复制,但由于make_unique将返回右值,应该不是的unique_ptr移动进入初始化器_List? 顺便说一句,如果我用shared_ptr替换unique_ptr,那么问题就解决了,但不是我正在寻找的解决方案,我想保留初始化样式和unique_ptr。 那么在这一点上,这个对已删除函数的有问题的调用正在发生?有一种方法可以在不替换unique_ptr的情况下进行编译?
不幸的是,它并没有真正那样工作。你必须明确地[移动](http://en.cppreference.com/w/cpp/utility/move)指针。 –
我已经将make_unique()包含在move函数中,仍然不会编译...我做错了吗?你能告诉我一个正确方法的例子吗? –
@Someprogrammerdude:这不是问题。指针正在正确地移入初始化器列表中。但他们没有被移出初始化列表并进入地图。我不认为有这样做的好方法。 –