初学 symbian 一路走来
2010-03-05 06:06:00 来源:WEB开发网作为一个类名中以C字符为后缀的类,HBufC描述符不能被直接改变,但此类提供的赋值操作符允许替换缓存中的整个内容。要想在运行期间改变一个HBufC对象,应该首先从HBufC::Des()方法中获得一个可变的描述符指针TPtr。
_LIT(KTestBuffer, "Heap Based");
(这个是个内置类型,相当于#Define KTestBuffer “Heap Based“)
// create a heap-based descriptor and place it on cleanup stack
HBufC* pHeap = HBufC::NewLC(32);
// create a pointer descriptor around pHeap
TPtr ptr(pHeap->Des());//把值赋给指针
// modify pHeap indirectly via ptr
ptr = KTestBuffer; //这里有点费解,KTestBuffer难道也是指针?
...
// clean up
CleanupStack::PopAndDestroy(pHeap);
RBuf
RBuf类从TDes继承而来,所以RBuf类的对象可以不用创建一个指向其数据的TPtr以修改其内容,这使得它要比HBufC更好用。在实例化时,RBuf对象既可以自己分配缓存,也可以取得先前分配好的内存或已有的堆描述符的控制权。为了与本章开始时的Symbian OS命名习惯保持一致,RBuf类没有被叫做HBufC,因为与HBufC不同的是,RBuf不是直接在堆上创建的。RBuf描述符通常在栈上创建,并且拥有一个它需要负责清除的指向堆上资源的指针。
在内部,RBuf表现为以下两种方式之一:
● 与TPtr直接指向内存中存储的描述符数据类似,RBuf对象分配或取得描述符数据的拥有权。
● 作为一个指向已存在堆描述符的指针——HBufC*。RBuf对象取得HBufC的拥有权,并且拥有一个指向包含完整描述符对象的指针(完整是相对于前面所讲的指向一个简单数据块的指针而言的)。
然而这都是透明的,不需要去了解一个特定的RBuf对象在内部是怎么描述的。使用此描述符类也相当直观,就像使用其他的描述符类一样,使用从TDes和TDesC继承而来的方法即可。
RBuf对于Symbian OS来说加入的时间相对较短,它最先出现在Symbian OS v8.1的文档中,并且被广泛应用于为基于Symbian OS v9或其后版本的手机所设计的软件中。
RBuf在许多最初的例子代码中基本没有用到,但是它却是您在需要为容纳经常改变的数据而动态分配缓存时比起 HBufC来说更为容易的类。
更多精彩
赞助商链接