将std :: unique_ptr与标准容器一起使用

时间:2011-01-09 03:05:51

标签: c++ pointers c++11 unique-ptr

当我意识到C ++ 11添加了unique_ptr时,我一直在寻找一种方法来做动态指针的安全向量和映射。我研究了如何在Google上使用它们,但是在寻找细节方面却没有成功。我需要知道的是:

  1. 除了自动内存收集之外,指针和unique_ptr之间究竟有什么不同?
  2. 如何从矢量或地图中删除unique_ptr?除了擦除迭代器之外,还有什么特殊的代码吗?

2 个答案:

答案 0 :(得分:13)

  1. 无。 unique_ptr只是指针的包装器,它会在unique_ptr被销毁时删除指针。它没有开销(就像它替换的auto_ptr模板一样)。
  2. 不 - 它会起作用。实际上难度来自指针插入到矢量或地图中 - 而您必须将<{em}} 移动到容器中。

答案 1 :(得分:4)

  1. 不同之处在于unique_ptr遵循移动语义。此外,顾名思义,您无法复制它。

  2. 删除std::vector<std::unique_ptr<T> >的元素将有效删除指针所指向的内容。