我知道以下智能类型的基本定义以及如何使用它们。但是我不是在地方/环境 非常肯定:正确使用std :: shared_ptr和std :: auto_ptr
std::auto_ptr
应优于std::shared_ptr
。std::shared_ptr
应优于std::auto_ptr
。std::auto_ptr
:用于确保指向的对象在控制离开块时自动销毁。std::shared_ptr
:将引用计数的智能指针包装在动态分配的对象周围。
我知道以下智能类型的基本定义以及如何使用它们。但是我不是在地方/环境 非常肯定:正确使用std :: shared_ptr和std :: auto_ptr
std::auto_ptr
应优于std::shared_ptr
。std::shared_ptr
应优于std::auto_ptr
。
std::auto_ptr
:用于确保指向的对象在控制离开块时自动销毁。
std::shared_ptr
:将引用计数的智能指针包装在动态分配的对象周围。在只有一个所有者的情况下,使用轻量级std :: unique_ptr。对于更复杂的场景,使用std :: shared_ptr。
没有理由使用std :: auto_ptr:新的智能指针shared_ptr,unique_ptr和weak_ptr包含所有必需的功能。 unique_ptr类取代auto_ptr
当一个可分辨指针实例拥有指针对象的完全所有权时,您可以使用auto_ptr(或C++ 11中的unique_ptr)。也就是说,如果您始终可以查看代码并用手指指向拥有指针指向的对象的std :: auto_ptr的一个实例,那么您对auto_ptr有很好的用例。
如果事情不那么清楚,可以使用shared_ptr。如果有疑问并且在单线程环境中,请使用shared_ptr。
auto_ptr
不应该被使用,因为它不适用于C++ 11 。
使用
std::shared_ptr
如果所有权是要共享std::unique_ptr
如果应该只有一个独特视图的对象,即,仅一个所有者auto_ptr
可以也不能用于标准容器,因为它不可复制。
1:D.10 auto_ptr
: “类模板的auto_ptr已经过时[注:类模板的unique_ptr(20.7.1)提供了一个更好的解决方案就要收注。”
你有一个正确的总结这两种类型所做的事情。我真的不知道问题是什么;当你需要行为X时,你使用提供行为X的行为,当你需要行为Y时,提供行为Y的行为Y.如果你“知道”这些定义,但并不真正理解**,那么你必须更具体。 –