正确使用std :: shared_ptr和std :: auto_ptr

时间:2011-10-04 08:43:49

标签: smart-pointers

我知道以下智能类型的基本定义以及如何使用它们。但是我不太确定这些地方/情况 其中:

  • std::auto_ptr应优先于std::shared_ptr
  • std::shared_ptr应优先于std::auto_ptr

  • std::auto_ptr:用于确保当控件离开块时,它指向的对象会自动销毁。

  • std::shared_ptr:在动态分配的对象周围包装引用计数的智能指针。

3 个答案:

答案 0 :(得分:5)

永远不应该使用

auto_ptr,因为从C ++ 11 1 开始不推荐使用它。

使用

    如果所有权是共享 ,则
  1. std::shared_ptr
  2. std::unique_ptr如果只有对象的唯一视图,即只有一个所有者
  3. auto_ptr也不能在标准容器中使用,因为它不可复制。


    1:D.10 auto_ptr:“不推荐使用类模板auto_ptr。[注意:类模板unique_ptr(20.7.1)提供了更好的解决方案。-end note”

答案 1 :(得分:0)

如果只有一个所有者,请使用轻量级std :: unique_ptr。对于更复杂的场景,请使用std :: shared_ptr。

没有理由使用std :: auto_ptr:新的智能指针shared_ptr,unique_ptr和weak_ptr包含所有必需的功能。 unique_ptr类取代auto_ptr

答案 2 :(得分:0)

当一个不同的指针实例具有指针对象的完全所有权时,您使用auto_ptr(或C ++ 11中的unique_ptr)。也就是说,如果您始终可以查看代码并用手指指向std :: auto_ptr的一个实例,该实例拥有指针所指向的对象,那么您有一个很好的用例来自auto_ptr。

如果事情不那么清楚,可以使用shared_ptr。如果有疑问并且在单线程环境中,请使用shared_ptr。