gpt4 book ai didi

c++ - 用于将 weak_ptr 应用于 unique_ptr 的内容

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:36 29 4
gpt4 key购买 nike

我试图理解 c++11 中的 unique_ptrshared_ptrweak_ptr

我听说 weak_ptr 对于缓存和中断循环等事情会很好。我听说它们与 shared_ptrs 配合得很好。

但是在这方面,shared_ptrsunique_ptrs有什么区别呢?为什么 weak_ptr 只能与一个一起使用而不能与另一个一起使用?为什么我不想对其他人拥有的东西进行弱引用?

最佳答案

weak_ptr 在技术上是一种卡在管理某些共享对象的一组 shared_ptr 的引用计数器上的方法。当最后一个 shared_ptr 被销毁时,对象被销毁,但只要有 weak_ptr 指向它,它的引用计数器就会继续存在。因此,通过任何仍然存在的 weak_ptr,您可以检查该对象是否仍然存在,或是否已被销毁。

如果它仍然存在,那么您可以从 weak_ptr 获得一个 shared_ptr 来引用该对象。

这个的主要用途是打破循环。

特别是,一个对象可以包含一个 weak_ptr 来保持它自己的引用计数器,这允许您从对象本身获得一个指向该对象的 shared_ptr。也就是说,一个 shared_ptr 与此对象的其他 shared_ptr 使用相同的引用计数器。这就是 enable_shared_from_this 的工作原理。

unique_ptr 没有任何引用计数器,因此卡在那个不存在的引用计数器上没有意义。

关于c++ - 用于将 weak_ptr 应用于 unique_ptr 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15457686/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com