引起内存泄漏?
Symbian操作系统的另一个重要概念就是二阶构造,它被广泛地使用在工程中。二阶构造提出的目的
是为了解决构造函数的资源分配问题,下面选举一个简单。例子:
CMyAppUi::CMyAppUi()
{
...
iAppContainer = new(ELeave)CMyAppContainer;
...
}
其中,CMyAppUi对象是在CMyAppDocument::CreateAppUiL()方法中创建的,如果CMyAppUi的内存空间
在CMyDocument::CreateAppUiL()方法中分配成功,但是在创建iAppContainer对象时发生Leave,那么指向
CMyAppUi对象的内存空间的指针将丢失,引起内存泄漏。
这个有点难以明白:
class A
{
....
public:
A()
{ B b = new(ELeave)B; }
.....
};
class B
{
....
};
A a = new(Eleave)A;
CleanupStack::PushL(a);
......
CleanupStack::
这段代码会引起一个问题:如果a对象创建成功(内存分配成功),但在构造函数中发生Leave,那么指向a对
象的指针将丢失,引起内存泄漏?
对象不是在创自的时候分动调用构造函数吗?应该是调用成功了才算对象创建成功吧?那在创造过程中的构
造函数过程中发生Leave就会引起调用它的上一层A a = new(Eleave)A;这一句发生Leave?
如果是这样,那上面的就说不通了?