我对“强指针”和“弱指针”的概念感到困惑。黛安哈克伯恩自己说:
当有强指针时,对象将保留在周围;一旦最后一个被释放,它就会被销毁。使用弱指针所能做的就是比较并尝试提升为强指针;如果对象上没有其他强指针,后者将失败。
这对我来说很不清楚。强指针是否等同于 ( boost::
) 共享指针?如果弱指针只是为了尝试将自己提升为强指针,那么弱指针的作用是什么?比如,我们什么时候需要弱指针和强指针?
更新:
谢谢大家,但我是专门询问android的内核sp
和wp
,它们与Java的引用完全无关。
基本上我正在尝试破解这里的代码http://www.androidenea.com/2010/03/share-memory-using-ashmem-and-binder-in.html
而且不太了解和的sp
使用wp
更新:
实际答案在于接受答案的评论。感谢 Gabe Sechan:
强指针和弱指针是不同的智能指针实现并且做同样的事情——当指针超出范围时,只要至少有一个强指针引用它,它就不会被释放。如果只有弱指针(或什么都没有)引用它。每当对它的强或弱引用被描述时,就会进行检查。
如果我有 10 个引用同一个对象的弱指针,而这 10 个中的一个超出范围,那么该对象会被销毁吗?而使用强指针,只有当它们全部超出范围时,对象才会被销毁?
是的,差不多。如果您只有 10 个弱指针,那么当最后一个强指针超出范围时,它可能已经超出范围。如果有空闲内存,该实现可能允许它停留一段时间,但如果您进入低内存条件,它将被切断,并且听起来他们的实现不像她引用的那样先进。而这个的使用还是主要是缓存——大致相当于一个boost shared_ptr和boostweak_ptr。所以基本上,弱指针可以让它引用的对象随时消失。