POCO C++库学习和分析 -- 内存管理 (三) 看完Poco 库中的智能指针,基本上Poco 中的内存管理已经快结束了
其他的部分都是些边边角角的东西,非常的简单
下面一一介绍
Au toReleasePool AutoReleasePool 类的出现也同样是为了解决用户动态分配对象的释放问题,但同智能指针AutoPtr 和SharedPtr 通过把堆上的对象包装成栈对象,再通过引用计数在类的析构函数中实现自动删除对象的解决方案不同是,其策略为构造一个容器,用来存储动态对象的指针,在 AutoReleasePool 析构函数中统一释放
这个过程和java 语言中的垃圾收集机制是类似的,只不过 AutoReleasePool 实现的非常简单,在AutoReleasePool 销毁时释放资源,而在 java 语言中会连续不断的定时检查并释放闲置资源
当然为了实现这个过程,AutoReleasePool 对所释放的类是有要求的,释放的类必须实现 release()接口
下面通过一个例子来说明问题: [cpp] view plaincopy 1
#include "Poco/AutoReleasePool
using Poco::AutoReleasePool; 3
class C 4
public: 6
void release() 9
delete this; 11
int main(int argc, char** argv) 15
AutoReleasePool pool; 17
C* pC = new C; 18
add(pC); 19
pC = new C; 20
add(pC); 21
return 0;