我有几个关于在容器中使用unique_ptr
的问题。这就是我想要做的:
class Stuff
{
public:
std::map<std::unique_ptr<int>, std::unique_ptr<int> > GetInfo() {return m_mapInfo;}
// Is this bad??
std::map<std::unique_ptr<int>, std::unique_ptr<int> > MoveInfo() {return std::move(m_mapInfo);}
private:
std::map<std::unique_ptr<int>, unique_ptr<int> > m_mapInfo;
};
这不会编译。它给我错误C2248。我正在使用VS2012。
现在我不使用
unique_ptr
的int
;它们实际上是抽象基类的unique_ptr
,但是我想消除有关该错误是否归因于我的复制/移动构造函数/赋值运算符的所有问题。任何人都可以解释该错误,以及如何解决该错误?
第二,我的
MoveInfo()
函数是不好的做法吗?只能为每个Stuff对象调用一次,因为map成员之后将为空,是吗? 最佳答案
unique_ptr
旨在获取并保持指针的所有权,即唯一。这就是为什么它们不是copiable的原因。
将副本返回到地图将意味着复制(复制)其所有内容,这是由于unique_ptr不可能实现的。这就是为什么您收到C2248消息的原因。
返回对映射的引用,或者考虑使用shared_ptr
(这样几个映射可以共享对同一指针的引用)。
关于c++ - 2 unique_ptr的 map ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31785526/