当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么不应该使用对智能指针的引用?》经验,为你挑选了2个好方法。

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

谢谢你的澄清



1> Doug T...:

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

这只是因为智能指针被销毁后使用了它的引用?

这是一个很好的答案.您可能不完全知道您的引用所指的指针的生命周期.

要解决这个问题,你需要研究一下boost :: weak_ptr.它不参与引用计数.当你需要使用它时,它会给你一个shared_ptr,一旦你完成它就会消失.它还会告诉您何时收集了指针.

来自weak_ptr文档

weak_ptr类模板存储已经由shared_ptr管理的对象的"弱引用".要访问该对象,可以使用shared_ptr构造函数或成员函数锁将weak_ptr转换为shared_ptr.当对象的最后一个shared_ptr消失并且对象被删除时,尝试从引用已删除对象的weak_ptr实例获取shared_ptr将失败:构造函数将抛出boost :: bad_weak_ptr和weak_ptr类型的异常: :lock将返回一个空的shared_ptr.

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



2> Dan Hewett..:

当使用智能指针(或任何分配管理对象)时,您指望构造函数/析构函数中定义的行为来管理refs/derefs/locks/unlocks.因此,这些类型的对象必须是真正的对象才能正常执行.当使用对这些对象(或指针)的引用时,你绕过机制(并要求一个wedgie).

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有