Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

非CBase类的清除栈支持

From 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 05:39.
174 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×