std::shared_ptr 和 std::auto_ptr 的正确用法
我知道以下智能类型的基本定义以及如何使用它们。但是我不太确定这些地方/情况 其中:
std::auto_ptr
应该优先于std::shared_ptr
。std::shared_ptr
应优先于std::auto_ptr
。std::auto_ptr
:用于确保当控制离开块时,它指向的对象会自动销毁。std::shared_ptr
:将引用计数智能指针包装在动态分配的对象周围。
I know the basic definition of the following smart types and how to use them. However I am not very sure on the places/circumstances
where :
std::auto_ptr
should be preferred overstd::shared_ptr
.std::shared_ptr
should be preferred overstd::auto_ptr
.std::auto_ptr
: used to ensures that the object to which it points gets destroyed automatically when control leaves a block.std::shared_ptr
: wraps a reference-counted smart pointer around a dynamically allocated object.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
切勿使用
auto_ptr
,因为从 C++111 开始已弃用它。使用
std::shared_ptr
std::unique_ptr
(如果应该只有唯一)对象的视图,即只有一个所有者auto_ptr
也不能在标准容器中使用,因为它不可复制。1:
D.10 auto_ptr
:“类模板 auto_ptr 已弃用。[注意:类模板 unique_ptr (20.7.1) 提供了更好的解决方案。-尾注”auto_ptr
should never be used because it is deprecated as of C++111.Use
std::shared_ptr
if ownership is to be sharedstd::unique_ptr
if there should only be a unique view of the object, i.e. only one ownerauto_ptr
can also not be used in standard containers as it is not copyable.1:
D.10 auto_ptr
: "The class template auto_ptr is deprecated. [ Note: The class template unique_ptr (20.7.1) provides a better solution. —end note"如果只有一个所有者,请使用轻量级 std::unique_ptr。对于更复杂的场景,请使用 std::shared_ptr。
没有理由使用 std::auto_ptr:新的智能指针shared_ptr、unique_ptr 和weak_ptr 包含所有必需的功能。 unique_ptr 类取代 auto_ptr
In the case there is only one owner, use lightweight std::unique_ptr. For more complicated scenarios use std::shared_ptr.
There is no reason to use std::auto_ptr: new smart pointers shared_ptr, unique_ptr and weak_ptr contain all required functionality. unique_ptr class supersedes auto_ptr
当一个可区分的指针实例拥有指向对象的完全所有权时,可以使用 auto_ptr(或 C++11 中的 unique_ptr)。也就是说,如果您始终可以查看代码并用手指指向拥有指针所指向对象的 std::auto_ptr 的一个实例,那么您就有了 auto_ptr 的一个很好的用例。
如果事情不太清楚,您可以使用shared_ptr。如果有疑问并且在单线程环境中,请使用shared_ptr。
You use an auto_ptr (or unique_ptr in C++11) when one distinguished pointer instance has full ownership of the pointee. That is, if you can always look at the code and point with your finger at one instance of std::auto_ptr that owns the object the pointer points at, you have a good use case fo auto_ptr.
If things are not so clear, you use a shared_ptr. If in doubt and in a single-threaded environment, use a shared_ptr.