2011-10-04 86 views
4

我知道以下智能类型的基本定义以及如何使用它们。但是我不是在地方/环境 非常肯定:正确使用std :: shared_ptr和std :: auto_ptr

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

  • std::auto_ptr:用于确保指向的对象在控制离开块时自动销毁。

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

你有一个正确的总结这两种类型所做的事情。我真的不知道问题是什么;当你需要行为X时,你使用提供行为X的行为,当你需要行为Y时,提供行为Y的行为Y.如果你“知道”这些定义,但并不真正理解**,那么你必须更具体。 –

回答

0

在只有一个所有者的情况下,使用轻量级std :: unique_ptr。对于更复杂的场景,使用std :: shared_ptr。

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

0

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

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

5

auto_ptr不应该被使用,因为它不适用于C++ 11 。

使用

  1. std::shared_ptr如果所有权是要共享
  2. std::unique_ptr如果应该只有一个独特视图的对象,即,仅一个所有者

auto_ptr可以也不能用于标准容器,因为它不可复制。


1:D.10 auto_ptr: “类模板的auto_ptr已经过时[注:类模板的unique_ptr(20.7.1)提供了一个更好的解决方案就要收注。”

相关问题