WEB开发网
开发学院手机开发Symbian 开发 Symbian 逐步深入 阅读

Symbian 逐步深入

 2010-03-26 04:24:00 来源:WEB开发网   
核心提示:一、本章节建立在您已经掌握了最基本的命名规则的基础上进行. 堆Symbian的对象:创建通常使用C++的new来进行分配,很少使用User::Alloc()之类的用户库函数来分配,Symbian 逐步深入,为什么呢?因为这样如果出现由于内存不足时,将引发错误,只有当内存容量非常低的情况下,继续压入才会产生异常,一个内

一、本章节建立在您已经掌握了最基本的命名规则的基础上进行.

   堆

Symbian的对象:

创建

通常使用C++的new来进行分配,很少使用User::Alloc()之类的用户库函数来分配。为什么呢?因为这样如果出现由于内存不足时,将引发错误。

一个内存分配的例子

Class CMyClass:public CBase

{

public:

CMyClass();

~CMyClass(); //析构函数

void Foo(); //自定义的函数

private:

Tint iNumber;

TBuf<32> iBuffer;

}

//下面使用堆分配

CMyClass* myCls=new CMyClass;

//接下来我们不需要去判断分配成功与否—注意与C++的区别

myCls->Foo(); //一旦new的操作有返回,其实已经可以确保它已经成功了

delete myCls;

删除

由于Symbian的C++设计中,对象的使用者有可能不是拥有者,所以我们对对象进行删除可能导致两次删除的问题。如何避免这一点:由于C++中的Delete操作并不是把指针置0.如果从类的析构函数外部删除对象成员,一定要确保将成员指针设置为NULL。因为对一个指针本身置0的对象来说。2次删除是没有关系的。

Symbian中的线程一旦启动,则其栈就不能再增长,一旦栈溢出,则会导致栈异常终止。所以对于比较大的资源(任何比文件名长的字符串)最好是放到堆中。然后创建一个指针指向它!--指针放在堆栈上完全可行。Symbian中只有T类可以放到栈中。函数退出不需要任何处理。

类的分类

Symbian的类有2种分类,C类和T类

C类由CBase类派生而来,在对上分配。尤其要注意的是:我们一般用一个类的成员变量或类的自动变量等去拥有C类的对象,则如果C类在一个可能异常退出的函数中,我们也要做好保存好这个指针,在Symbian中我们用清理栈来达到这个目的。

T类暂时不介绍

R类是一个句柄,具备了T类的特点—很少用指针,一般用引用;也具备C类的特点,负责它指向的资源的分配和释放。我们使用Close()来进行释放。

Symbian的错误处理

PushL()是一个异常退出函数,但是你可以放心,所有放入清除栈的指针即使在异常退出的时候也能得到清除,这是因为PushL()必须有空内存,只有当内存容量非常低的情况下,继续压入才会产生异常。假设这种情况发生了,那么已经压入清除栈的数据依旧会得到删除

1 2 3 4 5 6  下一页

Tags:Symbian 逐步 深入

编辑录入:coldstar [复制链接] [打 印]
赞助商链接