关于在容器中使用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成员在它之后会为空,是吗?是的?
答案 0 :(得分:1)
unique_ptr
旨在获取并保持指针的所有权,即唯一。这就是他们不是copiable的原因。
将副本返回到地图意味着复制(复制)由于unique_ptr而无法实现的所有内容。这就是您收到C2248消息的原因。
返回对地图的引用,或者考虑使用shared_ptr
(以便多个地图可以共享对同一指针的引用)。