资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二层,第三层,第四层,第五层,*,Symbian,OS C+,基础,主要内容,Symbian,中的资源管理概述,清除栈,异常退出,类的两阶段构造,动态数组,Symbian,中的资源管理概述,三种资源管理方式,清除栈,异常退出,类的两阶段构造,清除栈,清除栈机制,能够减少程序异常带来的内存泄漏,清除栈,使用清除栈,使用清除栈的基本步骤:,(,1,)创建对象,(,2,)把对象指针压栈,(,3,)使用对象提供的有可能异常退出的函数,也就函数名后缀有“,L”,的,(,4,)出栈,(,5,)根据情况决定是否释放对象,清除栈,使用清除栈示例,CMyObject,*obj1=new(,ELeave,),CMyObject,;,CleanupStack:Push(obj1);,obj1-,UseL,();,CleanupStack:Pop,();,delete obj1;,清除栈,清除栈的特殊用法,用法一,CMyObject,*obj1=new(,ELeave,),CMyObject,;,CleanupStack:Push(obj1);,obj1-,UseL,();,CleanupStack:PopAndDestroy,();,用法二,template,void,CleanupClosePushL(T,&,aRef,);,template,void,CleanupReleasePushL(T,&,aRef,);,template,void,CleanupDeletePushL(T,*,aPtr,);,异常退出函数,函数带有后缀“,L”,class CExam0303NewGuiAppUi:public,CAknAppUi,public:,void,ConstructL,();,CExam0303NewGuiAppUi();,virtual CExam0303NewGuiAppUi();,private:,void,HandleCommandL(TInt,aCommand,);,void,HandleStatusPaneSizeChange,();,CArrayFix,*,HelpContextL,()const;,private:,CExam0303NewGuiAppView*,iAppView,;,;,异常退出,在程序中抛出异常,CObject,*,pObject,=new,CObject,();,if(!pObject,),User:Leave(KErrNoMemory,);,抛出异常的方法,static void,Leave(TInt,aReason,);,static void,LeaveNoMemory,();,static,TInt,LeaveIfError(TInt,aReason,);,static,TAny,*,LeaveIfNull(TAny,*,aPtr,);,异常退出,捕获异常的方法,TRAP,TRAPD,示例,1,void,DoStart,(),TInt,err;,TRAPD(err,MainL,();,if(err),./,处理异常,异常退出,示例,2,void,DoStart,(),TRAPD(err,MainL,();,if(err),./,处理异常,类的两阶段构造,普遍,C+,类的创建及使用,CMyClass,*,pMyClass,=new,CMyClass,;,char*,pName,=,pMyClass,-,GetName,();,delete,pMyClass,;,类的两阶段构造,两阶段构造的意义,第一阶段是安全的,第二阶段做复杂的初始化,类的两阶段构造,静态方法,NewLC,和,NewL,CMySymbianClass,*,CMySymbianClass:NewLC,(),CMySymbianClass,*self=new(,ELeave)CMySymbianClass,();,CleanupStack:PushL(self,);,self-,ConstructL,();,return self;,CMySymbianClass,*,CMySymbianClass:NewL,(),CMySymbianClass,*self=,CMySymbianClass:NewLC,();,CleanupStack:Pop,();/self;,return self;,类的两阶段构造,二阶段构造函数,Void,ConstructL,(),*,iBuf,=HBufC:NewL(1000);,类的二阶段构造,Symbian,OS C+,类的用法,用法一:,CMySymbianClass,*,pMyClass,=,CMySymbianClass:NewLC,(),pMyClass,-,UseL,();/,使用类对象,UseOtherFunctionL,();,CleanupStack:PopAndDestroy,();,类的二阶段构造,Symbian,OS C+,类的用法,用法二:,CMySymbianClass,*,pMyClass,=,CMySymbianClass:NewL,(),pMyClass,-Use();/,使用类对象,UseOtherFunction,();,delete,pMyClass,;,类的二阶段构造,二阶段类的简化用法,类的声明,class CMySymbianClass2:public,CBase,public:,CMySymbianClass,();,void,ConstructL,();,CMySymbianClass,();,public:,TInt,GetSum,();,private:,TInt,m_nSum,;,;,类的二阶段构造,二阶段类的简化用法,类的创建和使用,CMySymbianClass2*pMySymbianClass2=new(,ELeave,)CMySymbianClass2;,CleanupStack:PushL(pMySymbianClass2);,pMySymbianClass2-,ConstructL,();,CleanupStack:Pop,();,
展开阅读全文