TInt UseCat(CCat* aCat); // Forward declaration
CCat* InitializeCatL()
{
CCat* cat = new(ELeave) CCat(); // (1)
CleanupStack::PushL(cat); // (2) See Section 5.5
cat->InitializeL(); // (3)
User::LeaveIfError(UseCat(cat)); // (4)
CleanupStack::Pop(cat);
return (cat);
}
————————————————————————————————————————————————
While heap variables referenced only by local variables may be orphaned
if a leave occurs, member variables will not suffer a similar fate (unless
their destructor neglects to delete them when it is called at some later
point). Thus the following code is safe:
void CTestClass::SafeFunctionL()
{
iMember = CCatClass::NewL(); // Allocates a heap member
FunctionMayLeaveL(); // Safe for iMember
}
虽然堆变量引用局部变量只可能成为孤儿
如果离开时,成员变量不会遭受同样的命运(除非
其析构函数忽略删除它们时,呼吁在以后
点) 。因此,下面的代码是安全的:
无效CTestClass : : SafeFunctionL ( )
(
iMember = CCatClass : : NewL ( ) ; / /分配堆会员
FunctionMayLeaveL ( ) ; / /安全的iMember
)
————————————————————————————————————————————————