2 unique_ptr的地图

时间:2015-08-03 10:59:48

标签: c++ dictionary std unique-ptr stdmap

关于在容器中使用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的{​​{1}}个;它们实际上是int来抽象基类,但我想删除任何关于错误是否归结为我的复制/移动构造函数/赋值运算符的问题。

任何人都可以解释错误,以及如何解决它?

其次,我的unique_ptr功能不好吗?它只能为每个Stuff对象调用一次,因为map成员在它之后会为空,是吗?是的?

1 个答案:

答案 0 :(得分:1)

unique_ptr旨在获取并保持指针的所有权,即唯一。这就是他们不是copiable的原因。

将副本返回到地图意味着复制(复制)由于unique_ptr而无法实现的所有内容。这就是您收到C2248消息的原因。

返回对地图的引用,或者考虑使用shared_ptr(以便多个地图可以共享对同一指针的引用)。