WEB开发网
开发学院手机开发Symbian 开发 Symbian开发入门 阅读

Symbian开发入门

 2010-06-03 23:07:00 来源:WEB开发网   
核心提示:}void SampleFunction(){};private:TInt iCode;TInt iScore;};CBase有两个特点:首先,它有一个虚的析构方法,Symbian开发入门(3),这样,可以通过CBase指针来删除它的子类,但是,不要在构造方法中初始化资源句柄,代码如下所示:CBase *pStu =

}

void SampleFunction(){};

private:

TInt iCode;

TInt iScore;

};

CBase有两个特点:首先,它有一个虚的析构方法,这样,可以通过CBase指针来删除它的子类。代码如下所示:

CBase *pStu = new CStudent();

delete pStu;

结果: i am a student

please, don't kill me!

其次, CBase类和它的子类,重载了new操作符,这使得当它在堆上创建的时候,自动初始化为0,也就是说,当它一开始被创建出来的时候,所有的成员变量都被初始化为0,所以您不必在构造方法中去做这件事情。但是,在栈上创建对象时,情况并非这样, 因为这时没有用到new操作。这将潜在地导致堆上创建的对象和栈上创建的对象的行为不一致。因此,C类的对象一定要在堆上创建。

很明显,当一个堆上的C类对象不再被需要时,我们需要消耗它。 一个C类的对象可能以两种方式存在:其它类的指针成员变量或是一个局部的针指变量。在前一种情况下,我们可以在类的析构方法中调用delete 来删除它;后一种情况要复杂一些,在调用任何有潜在的异常(leave)的代码之前,要把这个指针放到清除栈(cleanup stack)中,否则有可能发生内存泄露。CBase 类声明了私有的拷贝构造方法和赋值操作(=)。这是一个很好的策略,它可以用来防止客户代码不小心地使用了浅拷贝或赋值的方法。由于基类的拷贝构造和赋值是私有的,所以,如果您希望您的类可以能够使用拷贝构造方法,您必须显式地声明和定义拷贝构造方法和赋值操作。但是,考虑到C类的特性,深拷贝可能造成发生异常(leave)的隐患,而您绝对不能让类的构造方法(或析构方法)发生异常(我们在本教程的后面解释原因)。所以,如果您确实需要一个拷贝的方法,那么您可以为类添加一个的可能会发生异常的方法来完成同样的任务,例如:CloneL()或CopyL()。如果您提供的这个类是从CBase派生的,您就不必为了防止客户代码使用有潜在安全问题的“浅”拷贝,而在代码中将这些方法声明为私有的。

? R 类

前缀“R” 在这里代表资源(Resource), 通常是外部资源,例如:文件的句柄(handle)。

和 C类一同,Symbian系统中不存在一个对应的RBase类,所以一个R类应当有一个构造方法来将它的资源句柄置为0,表明还没有资源和这个新建的对象关联在一起。但是,不要在构造方法中初始化资源句柄,因为这样有可能使构造方法产生异常。R类中常常有类如

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Symbian 开发 入门

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