【发布时间】:2013-03-07 08:54:15
【问题描述】:
我对“强指针”和“弱指针”的概念感到困惑。 黛安·哈克伯恩自己说:
当有强指针时,对象会一直存在;它是 最后一个被释放后销毁。弱者所能做的一切 指针是比较并试图提升为强指针; 如果没有其他强指针,后者将失败 对象。
这对我来说很不清楚。强指针是否等同于 (boost::) 共享指针?如果弱指针只是为了尝试将自己提升为强指针,那么弱指针的作用是什么?比如,我们什么时候需要弱指针和强指针?
更新:
谢谢大家,不过我特意问的是android的内核sp和wp,和Java的引用完全没有关系。
基本上我正在尝试在这里破解密码http://www.androidenea.com/2010/03/share-memory-using-ashmem-and-binder-in.html
而且不是很懂sp和wp的用法
更新:
实际答案在于接受答案的 cmets。感谢 Gabe Sechan:
强指针和弱指针是不同的智能指针实现 做同样的事情——当指针超出范围时,这么久 因为至少有一个强指针引用它,所以它不会被释放。如果 只有弱指针(或什么都没有)引用它。支票是 每当对它的强或弱引用被取消时就完成。
如果我有 10 个引用同一个对象的弱指针,并且其中一个 那10个超出范围,对象会被销毁吗?而随着 强指针,只有当所有 10 个都超出范围时 对象被销毁?
是的,差不多。如果你只有 10 个弱指针,它可能会 已经超出范围,当最后一个强指针熄灭时 的范围。该实现可能允许它停留一点 如果有空闲内存则更长,但如果你去它会被砍掉 进入低记忆状态,听起来不像他们的 实施比她的报价先进。而这个的用途是 仍然主要是缓存——它大致相当于一个 boost shared_ptr 并提升weak_ptr。所以基本上,弱指针可以拥有对象 它的引用随时消失。
【问题讨论】:
-
+1 表示努力解释这个概念
标签: c android-source android-binder