为什么不能从 unique_ptr 构造出weak_ptr?

2023-12-30

如果我理解正确的话,weak_ptr不会增加托管对象的引用计数,因此它不代表所有权。它只是让您访问一个对象,该对象的生命周期由其他人管理。 所以我真的不明白为什么weak_ptr不能由unique_ptr,但只有一个shared_ptr.

有人可以简要解释一下吗?


如果你想一想,一个weak_ptr必须指对象本身以外的东西。这是因为该对象可能不再存在(当不再有指向它的强指针时)并且weak_ptr仍然必须引用包含该对象不再存在的信息的东西。

With a shared_ptr,某物是包含引用计数的东西。但随着一个unique_ptr,没有引用计数,因此不存在包含引用计数的东西,因此当对象消失时没有东西继续存在。所以没有什么可以weak_ptr参考。

也没有明智的方法来使用这样的weak_ptr。要使用它,您必须有某种方法来保证该对象在您使用它时不会被破坏。这很容易shared_ptr——这就是一个shared_ptr做。但是你如何做到这一点unique_ptr?显然你不能拥有其中两个,并且其他东西必须已经拥有该对象,否则它会被销毁,因为你的指针很弱。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么不能从 unique_ptr 构造出weak_ptr? 的相关文章

随机推荐