我记得在某处读到使用对智能指针的引用会导致内存损坏.这只是因为智能指针被销毁后使用了它的引用?或者引用计数搞砸了?
谢谢你的澄清
假设你在这里谈论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是否还在.
当使用智能指针(或任何分配管理对象)时,您指望构造函数/析构函数中定义的行为来管理refs/derefs/locks/unlocks.因此,这些类型的对象必须是真正的对象才能正常执行.当使用对这些对象(或指针)的引用时,你绕过机制(并要求一个wedgie).