×
Namespaces

Variants
Actions

如何正确使用LeaveIfNull

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

文章
翻译:
hoolee
最后由 hamishwillee 在 30 May 2013 编辑
  • 详细描述

下列方法是User类的:

static IMPORT_C TAny* LeaveIfNull( TAny *aPtr );

当指定的指针为NULL时,就会发生异常,抛出KErrNoMemory错误。缺省情况下,程序将弹出“Memory low, try closing some applications”的错误对话框。因此这个方法可以用在检测低内存的情况。


  • 解决方案

要确保LeaveIfNull()只用在检测可用RAM内存情况上。不要用来检测其他东西,如“没找到对象”或“函数参数为空”等。错误的用法会引起不必要的和误导性的“内存不足”通知,让用户感到迷惑。尽管这些错误可能是因为其他原因产生的。


举例来说,下列代码中可能产生其他错误,不一定是内存不足的原因:

ptr = iStore.GetPointerToItem( index );
User::LeaveIfNull( ptr ); // leaves with KErrNoMemory if ptr is NULL


正确的处理方法应该如下:

ptr = iStore.GetPointerToItem( index );
if( !ptr )
{
User::Leave( KErrNotFound );
}


另一个实例为:检验指针作为参数时函数可能引起的异常

 void DoesNotAcceptNullL( type* aArg )
{
User::LeaveIfNull( aArg );
...
}


如果传递空指针进去,我们按上述方法也不得而知。正确的方法是不要使用LeaveIfNull(),选择下列方法代替:

void DoesNotAcceptNullL( type* aArg )
{
if ( !aArg )
{
User::Leave( KErrArgument );
}
...
}
This page was last modified on 30 May 2013, at 04:41.
212 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.

×