std::shared_ptr 和 std::auto_ptr 的正确用法

发布于 2024-12-08 08:09:59 字数 346 浏览 0 评论 0原文

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

  • 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 over std::shared_ptr.
  • std::shared_ptr should be preferred over std::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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

何其悲哀 2024-12-15 08:09:59

切勿使用 auto_ptr,因为从 C++111 开始已弃用它。

使用

  1. 如果所有权要共享,则
  2. 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

  1. std::shared_ptr if ownership is to be shared
  2. std::unique_ptr if there should only be a unique view of the object, i.e. only one owner

auto_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"

烛影斜 2024-12-15 08:09:59

如果只有一个所有者,请使用轻量级 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

银河中√捞星星 2024-12-15 08:09:59

当一个可区分的指针实例拥有指向对象的完全所有权时,可以使用 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文