gpt4 book ai didi

c++ - 为什么不应该使用对智能指针的引用?

转载 作者:IT老高 更新时间:2023-10-28 13:01:06 25 4
gpt4 key购买 nike

我记得在某处读到使用对智能指针的引用会导致内存损坏。这仅仅是因为在智能指针被销毁后使用了它的引用吗?还是引用计数搞砸了?

感谢澄清

最佳答案

假设您在这里谈论 shared_ptr...

Is this simply because of using the reference of the smart pointer after its been destroyed?

这是一个很好的答案。您可能也不绝对知道您的引用所引用的指针的生命周期。

要解决这个问题,您需要研究 boost::weak_ptr。它不参与引用计数。当您需要使用它时,它会为您提供一个 shared_ptr,一旦您完成它就会消失。它还会让您知道何时收集了引用的指针。

来自 weak_ptr文档

The weak_ptr class template stores a "weak reference" to an object that's already managed by a shared_ptr. To access the object, a weak_ptr can be converted to a shared_ptr using the shared_ptr constructor or the member function lock. When the last shared_ptr to the object goes away and the object is deleted, the attempt to obtain a shared_ptr from the weak_ptr instances that refer to the deleted object will fail: the constructor will throw an exception of type boost::bad_weak_ptr, and weak_ptr::lock will return an empty shared_ptr.

注意方法 expired() 也会告诉你你的 ptr 是否还在。

关于c++ - 为什么不应该使用对智能指针的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/179105/

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