在std :: map中使用std :: auto_ptr是否安全?

时间:2011-11-26 19:01:08

标签: c++ stl smart-pointers c++03

我知道你必须小心自动指针(以及为什么),特别是对于STL。但我没有看到这个问题:

std::map<T1, std::auto_ptr<T2> >;

这样安全吗?


我看到它会如何在std::vector中中断,因为它必须不时地复制其项目,但对于std::map的值类型是否也是如此?


编辑:显然,不管它是否安全,我都不能(技术上)填充地图,但我会留下问题以供理论考虑。否则,请考虑关闭。

2 个答案:

答案 0 :(得分:2)

这不安全。从技术上讲,std::auto_ptr不符合 CopyConstructible Assignable 的要求,因为使用auto_ptr的复制构造函数或复制赋值运算符创建的副本不是' t等效于复制操作后的副本源。任何标准容器使用的任何类型都必须满足这些要求。

您可能会发现您似乎在一个特定用例的某个实现中获得了您期望的行为,但如果您违反了容器的要求,则不能指望您的代码在所有情况下都能正常工作。

答案 1 :(得分:0)

仍然不安全。如果没有别的,第一次从地图中检索指针时,您将转移所有权并使其无效。

auto_ptr有一个极其狭窄的有效用例。我唯一记得遇到的就是当一个物体想要明确表明它需要你掌握它的指针的所有权和责任时。

相关问题