×
Namespaces

Variants
Actions

非CBase类的清除栈支持

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

文章
dougcn 在 21 Jun 2008 创建
最后由 hamishwillee 在 15 Dec 2011 编辑

非CBase类的清除栈支持

迄今有关清除的讨论都假定待清除的对象是从CBase派生的,通过调用delete清除。其它类需要由程序员提供显式的清除支持。

清除栈通过CleanupStack::PushL()的两个重载版本支持其它类型的对象。你可以压入(push):

  • 一个TAny*: 这种对象通过对压入的指针调用User::Free()而被销毁。——注意这个不是那么强大: 简单释放内存,没有调用C++析构函数。
  • 一个TCleanupItem: 这种类型的对象包装了一个待压入对象的指针,以及提供清除那个对象的函数的指针。

SDK已提供了一些工具函数使构造一个适当的TCleanupItem变得容易。

例子: RPointerArray

RPointerArray 可以被压入清除栈并被安全销毁,通过给它制作一个TCleanupItem和一个静态函数。 在本例中,数组含有HBufC描述符。

// static cleanup function
static void PointerArrayCleanup( TAny* aArray )
{
static_cast<RPointerArray<HBufC>*>( aArray )->ResetAndDestroy();
}
 
RPointerArray<HBufC> array;
...
TCleanupItem arrayCleanup( PointerArrayCleanup, &array );
CleanupStack::PushL( arrayCleanup );
...
CleanupStack::PopAndDestroy(); // arrayCleanup

内部链接

This page was last modified on 15 December 2011, at 08:39.
68 page views in the last 30 days.