Symbian 清除栈 CleanupStack
2010-06-03 23:05:00 来源:WEB开发网核心提示:{RFs theFs;User::LeaveIfError(theFs.Connect());CleanupClosePushL(theFs);……..//执行可能发生异常退出的代码CleanupStack::PopAndDestroy(&theFs);}Symbian OS 提供的这三个工具模板函数,它们分别对应于R
{
RFs theFs;
User::LeaveIfError(theFs.Connect());
CleanupClosePushL(theFs);
……..//执行可能发生异常退出的代码
CleanupStack::PopAndDestroy(&theFs);
}
Symbian OS 提供的这三个工具模板函数,它们分别对应于Release()、Delete()、Close()这三个清除方法,这3个工具函数都会生成一个TCleanupItem类型的对象并将其压入清除栈中。
comments:其实是上面的三个函数会生成一个TCleanupItem对象,然后这个对象会自动调用相应的Close()或是其他的函数。
小结:
系统中每个分配了资源的可执行单元(或者线程)都有它自己的清理栈和最高级别的TRAP/TRAPD宏来做异常处理和一些退出后的善后工作。之所以引入清除栈,就是为了解决堆内存泄漏的问题,注意是堆内存,如果对象被创建在了栈上的话,这是不关清除栈的事的,因为栈上的对象所占空间由栈自动管理。
注意:对于C类对象而言,CleanupStack::Pop()方法仅仅是将C类对象指针从清除栈中弹出了而已,并没有调用这个C类对象的析构函数,若要析构,需要再加语句delete c,或者可以直接使用CleanupStack::PopAndDestroy()同时完成上面两个动作。
Tags:Symbian 清除 CleanupStack
编辑录入:coldstar [复制链接] [打 印]更多精彩
赞助商链接