微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 学习Symbian的基本概念

学习Symbian的基本概念

时间:09-12 来源:互联网 点击:

pstack中的东西销掉。这样就方便了很多。

一般的代码类似于:

CMyCls * mc=new (ELeave) CMyCls;

CleanupStack::PushL(mc);

me->doSth1L();

me->doSth2L();

CleanupStack::PopAndDestroy();

一般我们是将局部变量用cleanupstack来保护一下,但是对于类的成员变量则不能这样做(否则会二次销毁,产生严重错误)。

此外,在pop时超出范围了,压几个就弹几个,如果不小心把其它的内容给弹出来,也可能会引起严重错误的。所以,Pop有一个重载Pop(3,pA)这里表示弹出三个对象并且比较一下最后出栈的是不是pA。

四、两阶段构造

一般Symbian的类不会提供public的构造函数(不建议这么做),因为它提倡所谓的“两阶段构造”方法。定义为:

A)构造函数是protected或者privted的,并且不能包含引起Leave的操作。

B)实现两个静态函数NewL和NewLC,来代替构造函数提供给用户使用。

C)实现一个ContructL函数实现第二阶段的构造,其实大多数初始化的工作可以放在这里进行。

两阶段构造的代码相当地格式化了,比如两个静态函数NewL和NewLC的代码一般是这样的:

CMyClass * CMyClass::NewL()

{

CMyClass * self=NewLC();

CleanupStack::Pop();

return self;

}

CMyClass * CMyClass:NewLC()

{

CMyClass * self = new(ELeave) CMyClass;

CleanupStack::PushL(self);

self->ContructL();

return self;

}

而在ContructL中一般可以做一些真正的构造函数里的操作,例如分配内存、创建窗体之类的活儿。

五、命名规则

这也是一个需要注意的地方,按教材上所言列举如下:

类的名称前缀有T、C、M和R四个,分述如下:

T表示基本类,它位于栈里,就当作是一个结构吧。

C表示常规的类,继承于CBase的,这是C++标准的类的概念,所以有构造要析构。

M表示是一个接口,很好理解,它肯定含有纯虚函数。

R表示是一个系统资源,比如文件、网络等等,所以它肯定有Open有Close。

还有,K开头表示常量、E开头表示枚举也要记得。

形参用a开头,类成员变量用i开头,这此规则我们在自动生成的代码中也能看到。

还有函数的命名上也有讲究,不过不是开头而是结尾:象L表示可能会有Leave,LC表示不但可能有Leave而且它会被自动放在CleanupStack中。

还有两个二阶段构造又有三个函数名称固定了:NewL、NewLC和ContructL。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top