C++ 使用标准容器的std::unique_ptr

C++ 使用标准容器的std::unique_ptr,c++,pointers,c++11,unique-ptr,C++,Pointers,C++11,Unique Ptr,当我意识到C++11添加了unique\u ptrs时,我一直在寻找一种实现安全向量和动态指针映射的方法。我研究了如何在谷歌上使用它们,但在寻找细节方面一直没有成功。我需要知道的是: 指针和unique\ptrs之间除了自动内存收集之外,还有什么不同之处 如何从矢量或地图中删除唯一的\u ptr?除了删除迭代器,还有什么特殊的代码需要我使用吗 没什么。unique_ptr只是指针的包装,当unique_ptr被销毁时,它会删除指针。它没有开销(就像它替换的auto_ptr模板一样) 不,它会起作

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

  • 指针和
    unique\ptr
    s之间除了自动内存收集之外,还有什么不同之处
  • 如何从矢量或地图中删除
    唯一的\u ptr
    ?除了删除迭代器,还有什么特殊的代码需要我使用吗
  • 没什么。
    unique_ptr
    只是指针的包装,当
    unique_ptr
    被销毁时,它会删除指针。它没有开销(就像它替换的
    auto_ptr
    模板一样)
  • 不,它会起作用的。困难实际上来自于将指针插入向量或映射——而您必须将
    unique\u ptr
    移动到容器中
  • 区别在于unique_ptr遵循移动语义。而且,顾名思义,你不能复制它

  • 删除std::vector的元素将有效地删除指针指向的任何内容


  • 谢谢我不太确定,在谷歌上也找不到太多,所以我很高兴得到一个答案。+1是一个很好的解释,不过你可能想注意,最多一个唯一的\u ptr可以指向一个资源,而无限多的原始指针可以指向一个特定的资源。+1,可能添加了一个插入示例(特别是说明为什么需要移动)会有帮助。唯一性是一个必要条件吗?如果安全是你的目的,std::shared_ptr可能是一个替代方案。+1代表2。-当你关注它时很明显,但在从原始指针过渡到智能指针时可能是一个问题,如果你只走了“一半”原始指针指向已释放的内存,因为某个项已被删除