Symbian 清除栈 CleanupStack
2010-06-03 23:05:00 来源:WEB开发网另外,Symbian OS还提供的三个用于清除的工具函数-- CleanupReleasePushL(),CleanupDeletePushL(), CleanupClosePushL(),分别对应是Release()、Delete()、Close(),都会生成一个TCleanupItem对象让我们能够自己定义清除的过程。并结合下面三个入栈方法。当然,这里入栈的对象引用,可以是创建在堆上的任意对象,比如C类对象,R类对象,T类对象,M类对象等等均可。
(1) CleanupReleasePushL( T& aRef注意参数不是T*) //
异常退出的处理或PopAndDestroy()调用将对T类对象调用Release()。
举例:
class MExtraTerrestrial
{
public:
virtual void CommunicateL() = 0;
…..//出于整洁,略去接口其他代码
virtual void Release() = 0;
}
class CClanger : public CBase , MExtraTerrestrial
{
public:
static MExtraTerrestrial* NewL();
virtual void CommunicateL();
virtual void Release();
private:
CClanger();
~CClanger();
private:
……..
}
void TestMixinL()
{
MExtraTerrestrial* clanger = Clanger::NewL();
CleanupReleasePushL(*clanger);//参数不是指针,这点和普通PushL不同
……..//执行可能发生异常退出的代码
CleanupStack::PopAndDestroy(clanger);//这里是指向对象的指针
}
注意:入清除栈和出清除栈时的参数是不一样的。
(2) CleanupDeletePushL( T& aRef)
通过使用CleanupDeletePushL()可以使异常退出处理或PopAndDestroy()调用对对象施以delete操作,进而调用对象的析构函数,并且相应的堆内存也会被释放。这就类似于使用接受CBase指针的CleanupStack::PushL()重载函数。当必须要将M派生类指针置于清除栈上时,该函数尤为有用。
(3) CleanupClosePushL( T& aRef类对象内置了Close()方法,不用另外添加了。) //R
如果对象是通过CleanupClosePushL()压入清除栈的话,则异常退出处理或PopAndDestroy()调用将对对象施以close()操作。
void UseFilesystemL()
Tags:Symbian 清除 CleanupStack
编辑录入:coldstar [复制链接] [打 印]更多精彩
赞助商链接