清除栈是Symbian OS中的一个基本组成部分,作用是用来处理在异常退出发生时泄漏的内存。
因为Symbian OS不采用标准C++的异常处理(原因是:1、Symbian设计时,标准C++异常处理还没有。2、标准C++异常处理耗费资源多,Symbian为硬件要求较低的设备设计。)
所以Symbian OS采用异常退出的方式进行处理。
清除栈分为三种:
1、CleanupStack::PushL(CBase* aPtr)
通常用CleanupStack::Pop(CBase* aPtr)来配对使用。应用于对象还需要继续使用。
如果需要析放,使用CleanupStack::PopAndDestroy(CBase* aPtr)或者CleanupStack::PopAndDestory(UInt iCount)来析放。
主要用来清除从CBase继承下来的C类对象。
2、CleanupStack::PushL(TAny*),CleanupStack::PushL(TCleanItem)
用于非CBase继承的类,主要针对M类,没有析构函数。需要另外定义清除函数。Sysbian OS提供了3个工具函数对应于3个清除方法:Release()、Delete()和Close()。
CleanupReleasePushL(T& aRef),异常退出的处理或PopAndDestory()调用将对T类对象调用Release()来释放对应的资源。
CleanupClosePushL(T& aRef),异常退出的处理或PopAndDestory()调用将对T类对象调用Close()来释放对应的资源。
3、CleanDeletePushL()
用于非CBase继承的类,有析构函数,异常退出的处理或PopAndDestory()调用将对类的析构函数来释放对应的资源
注意:
1、对一个对象,清除永远不应超过一次。
2、永远不要将类成员变量压入清除栈。
3、如果对象压入清除栈,函数返回时还保留在清除栈,该函数应以“C”作为后缀。
Posted on 2009-06-16 23:34 曾浩 阅读(629) 评论(0)  编辑 收藏 引用 所属分类: Symbian

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理