我有几个关于在容器中使用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_ptrint;它们实际上是抽象基类的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/

10-12 20:55