Symbian 逐步深入
2010-03-26 04:24:00 来源:WEB开发网一、本章节建立在您已经掌握了最基本的命名规则的基础上进行.
堆
Symbian的对象:
创建
通常使用C++的new来进行分配,很少使用User::Alloc()之类的用户库函数来分配。为什么呢?因为这样如果出现由于内存不足时,将引发错误。
一个内存分配的例子
Class CMyClass:public CBase
{
public:
CMyClass();
~CMyClass(); //析构函数
void Foo(); //自定义的函数
private:
Tint iNumber;
TBuf<32> iBuffer;
}
//下面使用堆分配
CMyClass* myCls=new
//接下来我们不需要去判断分配成功与否—注意与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()必须有空内存,只有当内存容量非常低的情况下,继续压入才会产生异常。假设这种情况发生了,那么已经压入清除栈的数据依旧会得到删除
更多精彩
赞助商链接