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

Symbian开发入门

 2010-06-03 23:07:00 来源:WEB开发网   
核心提示:ASSERT(ptr.Length()==buf.Length());_LIT8(KPalindrome2, "Are we not drawn onward, we few, drawn onward tonew era?");ptr = KPalindrome2; // Panic! KPali

ASSERT(ptr.Length()==buf.Length());

_LIT8(KPalindrome2, "Are we not drawn onward, we few, drawn onward to

new era?");

ptr = KPalindrome2; // Panic! KPalindrome2 exceeds max length of ptr(=40)

? TBuf

这也是一个模板类,它是一个可修改的缓冲区描述符类,后面的表示缓冲区大小。TBuf从TBufBase类派生,而TBufBase是从 TDes派生的,因此,它继承了TDes和TDesC类所有的方法。像TBufC一样,TBuf也定义了一系列的构造方法和赋值操作。对所有的描述符类型来讲,内存管理是您的责任,尽管这个缓冲区中的数据是可修改的,但它的长度不能超过在构造方法中所给定的最大值(n)。假如缓冲区的内容需要扩展,那么您必须决定是在编译的时候就给定一个足够大的值,或是在运行的时候动态分配内存。但无论哪种情况,都要确保数据长度不要超过缓存区的最大长度。

如果需要使用动态分配的内存,您可以使用基于堆的描述符,这个我们在后面要讲到。要是您觉得管理内存分配的任务太过繁重,您也可以选择使用动态数组。不过,您应当记住,使用动态数组的额外开销是很高的。

_LIT(KPalindrome, "Satan, oscillate my metallic sonatas");

TBuf<40> buf1(KPalindrome); // Constructed from literal descriptor

TBuf<40> buf2(buf1); // Constructed from constant buffer descriptor

TBuf8<40> buf3((TText8*)"Do Geese see God?"); // from C string

TBuf<40> buf4; // Constructed empty, length = 0, maximum length = 40

// Illustrate copy and replace

buf4 = buf2; // buf2 copied into buf4, updating length and max length

buf3 = (TText8*)"Murder for a jar of red rum"; // updated from C string

3.6 基于堆的(Heap-Based)缓冲区描述符

当您要使用非常长的字符串时,有另外一种选择:基于堆的描述符。它能拥有比它的创建者更长的生存期。当您在编译的时候还不能确定缓冲区长度的时候,堆描述符也是很有用的,这时,它的作用相当于C语言中的malloc。

? HBufC

也许您已经发现,HBufC的类名以“H”开头,这不符合Symbian系统中惯用的命名习惯。这的确是一个特例,“H”表示这个类一般是在堆(Heap)上分配的。HBufC定义了静态的NewL()方法,用来在堆上创建一个缓存区。正如您所见到,HBufC中的字母“C”表示这个表述符是不可修改的。对该类的操作几乎和

上一页  7 8 9 10 11 12 13 14 15 16 17  下一页

Tags:Symbian 开发 入门

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