我有一个名为的结构Foo
,其中包含一个unique_ptr
struct Foo {
std::unique_ptr<Bar> pointer;
};
现在我正在尝试将实例存储Foo
在unordered_map
std::unordered_map<int,Foo> myMap;
从技术上讲,这应该是可能的,因为地图不需要复制构造函数,只需要移动构造函数。
但是,我无法在我的地图中插入元素:
myMap.insert(std::make_pair(3, Foo()));
此行将在 Visual C++ 2010 中生成以下错误(由我粗略翻译,因为我的编译器不是英文的):
error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : unable to access private member declared in 'std::unique_ptr<_Ty>'
with
[
_Ty=Foo
]
c:\Softwares\Visual Studio 10.0\VC\include\memory(2347) : see declaration of 'std::unique_ptr<_Ty>::unique_ptr'
with
[
_Ty=Foo
]
This diagnostic happened in the compiler-generated function 'Foo::Foo(const Foo&)'
因此,由于未知原因,编译器尝试生成复制构造函数Foo
而不是移动构造函数,但失败了。
我试图用 替换std::make_pair
,std::pair<int,something>
但找不到任何something
有效的方法。
编辑:这有效
struct Foo {
Foo() {}
Foo(Foo&& other) : pointer(std::move(other.pointer)) {}
std::unique_ptr<Bar> pointer;
};
但是我的真实结构包含很多成员,我不想把它们都写在move构造函数中。