我知道以下智能类型的基本定义以及如何使用它们。但是我不太确定这些地方/情况 其中:
std::auto_ptr
应优先于std::shared_ptr
。 std::shared_ptr
应优先于std::auto_ptr
。
std::auto_ptr
:用于确保当控件离开块时,它指向的对象会自动销毁。
std::shared_ptr
:在动态分配的对象周围包装引用计数的智能指针。答案 0 :(得分:5)
auto_ptr
,因为从C ++ 11 1 开始不推荐使用它。
使用
std::shared_ptr
std::unique_ptr
如果只有对象的唯一视图,即只有一个所有者 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。