Android上C++对象的自动回收机制分析

分享到:

1.       背景

C++没有像Java那样的内建的对象自动回收机制,new创建的对象没有delete,会一直存在于内存中。对象已经不再使用,但是如果忘记delete,会造成内存资源的泄露。在实际开发过程中,分析内存泄露是一件很棘手的事情。本文基于Android2.2系统源码,对Android的C++对象自动回收机制进行分析。

2.       引用计数和智能指针

Android上C++对象实现自动释放的机制是使用引用计数+智能指针。对象的生命周期通过引用计数来管理,当引用计数>0时,对象不会被释放;当引用计数=0时,释放该对象。

使用对象的方式是通过智能指针引用该对象,智能指针也是C++对象,利用C++的构造析构自动调用的特性,在构造函数中将对象的引用计数加1,析构函数中减1,当计数减为0时delete该对象,这样通过智能指针+引用计数就实现了对象的自动化管理。

下面通过代码分析具体实现过程。

3.       RefBase

Android中C++类一般都会直接或间接继承RefBase类,RefBase类有一个成员变量mRefs,mRefs是weakref_impl类型,weakref_impl记录着引用计数、目标对象(通过引用计数管理的对象)指针和符号位。通过继承RefBase,使类具有引用计数的功能。

weakref_impl* const mRefs;
昵    称:
验证码:

相关文档: