Android中定义了两种智能指针类型,一种是强指针sp(strong pointer),一种是弱指针(weak pointer)。其实称为强引用和弱引用更合适一些。强指针与一般意义的智能指针概念相同,通过引用计数来记录有多少使用者在使用一个对象,如果所有使 用者都放弃了对该对象的引用,则该对象将被自动销毁。
弱指针也指向一个对象,但是弱指针仅仅记录该对象的地址,不能通过弱指针来访问该对象,要想访问弱指针所指向的对象,需首先将弱指针升级为强指针(通过wp类所提供的promote()方法)。弱指针所指向的对象是有可能在其它地方被销 毁的,如果对象已经被销毁,wp的promote()方法将返回空指针,这样就能避免出现地址访问错的情况。
为什么不能通过弱指针来访问该对象呢,因为wp中没有operator->() 操作符号,所以必须转换为sp。但是wp也可以通过unsafe_get()来访问改对象
template <typename T>
class sp
{
class sp
{
inline T* operator-> () const { return m_ptr; }
........
};
template <typename T>
class wp
{
class wp
{
.....
inline T* unsafe_get() const { return m_ptr; }
......
}
http://blog.csdn.net/droidphone/article/details/5799792
测试代码:frameworks/base/cmds