Symbian 程序内存管理的特点
2010-03-01 16:22:00 来源:WEB开发网核心提示:}每创建一个对象,必须立刻加入到清除栈中,Symbian 程序内存管理的特点(2),一旦出现异常TRAD 会调用PopAndDestroy()清空清除栈,并释放相对于的空间,第二阶段才真正申请内存或者可能发生Leave的函数,第二阶段构造的申请的内存的变量在析构函数中删除,如果没有Levae,则把对象从清除栈中弹出
}
每创建一个对象,必须立刻加入到清除栈中,一旦出现异常TRAD 会调用PopAndDestroy()清空清除栈,并释放相对于的空间。
如果没有Levae,则把对象从清除栈中弹出,指针就不会被销毁。
清除栈的声明,控制台程序在E32main()声明,GUI程序有CONE创建,所以不用自己声明。
5、Two phase construction (两阶段构造)
class CClass : public CBase
{
privae:
static private NewL();
CClass();
~CClass();
void Construct();
private:
TInt ivalue;
CObkject *obj;
}
CClass::NewL()
{
//第一阶段
CClass * self = new(ELeave)CClass();
CleanupStack::PushL(self);
//第二阶段
self->ConstructL(); //如果构造失败,则leave
CleanupStack::Pop(self);
return self;
}
CClass::CClass
{
//不做任何操作
}
CClass::ConstructL()
{
CObject *obj= new(ELeave) CObejct;
}
CClass::~Class
{
delete obj;
}
1、C类才用两阶段构造
2、需要两阶段构造类一般调用NewL()构造,调用私有的方法完成真正构造的过程。
3、第一阶段不能有任何分配申请堆内存的行为,也不能调用导致发生Leave的函数,只是对自身进行构造。第二阶段才真正申请内存或者可能发生Leave的函数。第二阶段构造的申请的内存的变量在析构函数中删除,而不能放在清除栈中。
更多精彩
赞助商链接