告诉你可能不知道的秘密之Android轻量级引用LightRefBase
2013-12-29 18:16
459 查看
Google工程师之所以称其为轻量级引用,不仅仅是因为轻量级引用不涉及弱引用技术。
2.轻量级引用轻在机制,正如上一点所言,采用模板机制,而不是复杂的OOP机制,所以轻量级引用不涉及菱形缺陷,无需使用虚继承!
3.轻量级引用基类轻在内存,只拥有一个成员变量,用以计数。其引用计数类模板不含有虚函数,如果尾端类(不被其他类继承的类)直接继承引用计数基类,那尾端类也不需要虚的析构函数,不会出现因部分删除而产生内存泄露,因为模板类代码中有一处使用static_cast向下转型,模板确保其安全。
android的智能指针,只负责调用 引用类的dec/inc方法,不负责删除工作。具体删除工作有引用基类LightRefBase和RefBase负责。
RefBase持有弱引用,持有指针,在进行删除工作时较为复杂。
总之,轻量级引用,功能简单,不涉及虚继承,一般不需要虚函数。
2.轻量级引用类,使用模版技术,所以模版技术的缺陷,轻量级引用亦有,很明显一点就是你会需要很多不同轻量级引用类。
3.编译级别支持引用栈对象,运行时会崩溃,Scott Meyers说过只要编译器允许,就一定有人这么干。此问题需要使用者解决-----利用protected dector 和 friend class refbase
本文乃我学习时,自己总结,如果有错误请多多指教。
轻的额外三点:
1.轻量级引用轻在功能,采用模板技术,模板里有关于指针类型转换的代码,LightBaseRef<MyClass>必须作为MyClass的基类才能完成转换,仅仅为MyClass类型及其派生类型对象提供引用计数功能!总而言之,不同类继承体系拥有不同的引用技术基类。2.轻量级引用轻在机制,正如上一点所言,采用模板机制,而不是复杂的OOP机制,所以轻量级引用不涉及菱形缺陷,无需使用虚继承!
3.轻量级引用基类轻在内存,只拥有一个成员变量,用以计数。其引用计数类模板不含有虚函数,如果尾端类(不被其他类继承的类)直接继承引用计数基类,那尾端类也不需要虚的析构函数,不会出现因部分删除而产生内存泄露,因为模板类代码中有一处使用static_cast向下转型,模板确保其安全。
android的智能指针,只负责调用 引用类的dec/inc方法,不负责删除工作。具体删除工作有引用基类LightRefBase和RefBase负责。
RefBase持有弱引用,持有指针,在进行删除工作时较为复杂。
总之,轻量级引用,功能简单,不涉及虚继承,一般不需要虚函数。
轻量级引用的缺陷:
1.不支持弱引用。2.轻量级引用类,使用模版技术,所以模版技术的缺陷,轻量级引用亦有,很明显一点就是你会需要很多不同轻量级引用类。
3.编译级别支持引用栈对象,运行时会崩溃,Scott Meyers说过只要编译器允许,就一定有人这么干。此问题需要使用者解决-----利用protected dector 和 friend class refbase
本文乃我学习时,自己总结,如果有错误请多多指教。
相关文章推荐
- 【C++】Android (Light)RefBase-sp-wp引用计数-智能指针源码分析
- Android系统的计数基类LightRefBase、RefBase与智能指针sp、wp
- Android指针管理:RefBase,SP,WP
- Android指针管理:RefBase,SP,WP
- Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)
- 你可能不知道的百度的三个有趣的秘密
- [置顶] Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)
- 资深HR告诉你,面试中你不知道的那些秘密!
- 你可能不知道的字符比较中的“秘密”
- Android Studio你可能不知道的操作
- android RefBase
- 编译错误android::RefBase::decStrong的解决
- Java学习笔记----你可能不知道那些知识,对象复制与引用
- 【Android】你可能还不知道的elevation、以及Z值等
- ANDROID -- sp,wp,RefBase 使用
- 【Android】你可能不知道的Support(一) 0步自动定向刷新:SortedList
- 深入理解Android(09)——深入理解RefBase、SP和WP
- 你可能不知道的Visual Studio 2010使用技巧(VS2010的秘密)
- Android指针管理:RefBase,SP,WP
- 您可能还不知道的八款开源Android游戏引擎