×
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 07:41.
118 page views in the last 30 days.
×