[图文]Symbian OS 中的Class命名约定( T类)(转)

T类的功能非常类似于ANSI C++的内部数据类型,因此它们的前缀与上面所说的typedefs为同一个字母(“T”为“Type”)。和所有的内部数据类型一样,它们也没有析构函数,所以T类也不应包含任何有析构函数的成员数据。T类中可以包含的数据成员如下:
 “‘plain ol’ data”(内部类型)及对其它T类对象。
 指针和引用(reference) “uses a”关系的效率要优于“has a”关系,后者暗示了拥有关系,TPtrC描述符是一个典型的指针T类,在第5章中有详细的论述。
T类内部包含它们的所有数据但并不包含指针,引用或句柄 (尽管允许使用指向其他对象数据的引用)。T类不允许拥有外部数据的原因是因为T类禁止拥有析构函数。
不用析构函数,T类对象可以在stack上创建并在离开函数作用域时恰当的清除,正常返回或者产生一个leave(“leaving”的详细论述参见第2章)。即使T类有析构函数,Symbian OS也不能在发生leave时调用它,因为leave不同于ANSI C++中的throw机制。如果需要调用析构函数来安全的清除对象,对象只能在代码作用域内的stack上创建,因为在这个作用域内不会产生leave——这无疑带来了一些限制。
T类对象也可以在heap上创建。但在heap上创建的T类对象必须在有可能产生leave的代码之前将其压入清洁栈(cleanup stack)。一旦leave发生,T类对象的内存可以通过清洁栈来释放(详细论述参见第3章) 但是这样不会调用析构函数。
T类在一般情况下同样不定义默认构造函数,实际上,当一个T类仅由内部类型组成时,构造函数将会阻止你使用类似下面的成员初始化方式:
TMyPODClass local = {2000, 2001, 2003};
但是,T类在导出虚函数极少的情况下,默认的构造函数必须导出,因为它需要依靠一些客户端代码链接。针对这一问题我们将在第20章详细讨论EXPORT_C操作符。
通常,T类成员非常单一,足以进行逐位复制(bitwise copy),所以复制构造函数和赋值操作符是很简单的,编译器自动产生的版本可以有更高的效率。所以除非有特殊要求通常不需要编写复制构造函数和赋值操作符。当然如果需要防止复制操作,就需要在class中将复制构造函数和赋值操作符声明为private并且不予实现。
一些T类的API非常复杂,例如那些可以进行字符串分析的TLex类和描述符基类TDesC与TDes(参见第5章)。但在有些情况下,T类只是一个C语言风格的由公共数据成员组成的struct(通常,struct的前缀是S而不是T,但近来大多数Symbian OS的代码更倾向于使用T前缀)。
在枚举中你也可以看到T前缀的使用,因为它们同样是简单类型。例如:
enum TMonthsOfYear{EJanuary=1,EFebruary = 2,……,EDecember= 12};

基本原则----T类禁止拥有析构函数


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-126139/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-126139/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值