【发布时间】:2021-06-20 09:47:58
【问题描述】:
虽然通过知道它们是什么很容易了解std::shared_ptr、std::unique_ptr 和std::weak_ptr,但我似乎很难理解它们在什么情况下被证明是有用的。
谁能给出其中三个的一两个具体例子?
【问题讨论】:
-
当只有一个东西应该拥有指针时使用
unique_ptr。如果您希望多件物品共享所有权,请使用std::shared_ptr。使用weak_ptr分发一个可以获取指针的存根,如果它还没有被销毁的话。 -
您所要做的就是想象一个只有 原始指针的世界。
weak_ptr帮助解决循环引用问题。 -
在我看来,最好使用
std::unique_ptr(连同non-owning原始指针作为函数参数),并避免使用std::shared_ptr。有时std::shared_ptr确实是最好的解决方案,只有在这种情况下我才会考虑它。与 .NET 平台上的 C# 相比,所有对象都非常像到处都有std::shared_ptr。 F.27 用于 shared_ptr 原因和示例。 -
不完全重复,因为该问题仅与共享/弱问题有关,但那里有很多好的答案:stackoverflow.com/q/48834271/126995
-
阅读Effective Modern C++,答案就在那里。
标签: c++ c++11 shared-ptr unique-ptr weak-ptr