WEB开发网
开发学院手机开发Symbian 开发 Symbian 清除栈 CleanupStack 阅读

Symbian 清除栈 CleanupStack

 2010-06-03 23:05:00 来源:WEB开发网   
核心提示:另外,Symbian OS还提供的三个用于清除的工具函数-- CleanupReleasePushL(),CleanupDeletePushL(), CleanupClosePushL(),Symbian 清除栈 CleanupStack(4),分别对应是Release()、Delete()、Close(),都会生成一

另外,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()

上一页  1 2 3 4 5  下一页

Tags:Symbian 清除 CleanupStack

编辑录入:coldstar [复制链接] [打 印]
赞助商链接