Symbian基本規範:描述符

來源:互聯網
上載者:User

 Symbian基本規範:描述符  
  

概要

    描述符既是Symbian OS中基本的東西,同時也是比較非物件導向(non-OO)和物件導向(OO)設計方法的極好的例子。

    在C語言中字串是下面這樣的:

     char *hello = “hello”;

    上面的語句使設定一些記憶體使其包含‘h’,‘e’,‘l’,‘l’,‘o’,‘/0’6個字元。strlen()函數從開始位元組掃描記憶體直到以Null 字元(‘/0’)結尾。如果你想擴充字元串,你需要知道給它分配了多少記憶體。

  

描述符抽象

    通過兩個抽象類別表示出字串的基本需要:TDesC和TDes。

    TDesC是常量的或者說不可修改的描述符,它包含有地址和長度資訊。在下面的情況下可以使用這個類:需要對資料做許多操作但不需要更改它,因此TDesC提供了許多不修改資料的函數。

    TDes是可修改的描述符,它另外包含有最大長度資訊,它允許資料擴充或減小(只要不超過最大長度),因此,TDes提供許多可以修改資料的函數。

    描述符的基本特徵是修改操作不可以超出已經分配的長度,但有一些類允許這樣做,例如CBufBase和它的衍生類別。如果一個TDes函數引發溢出將會產生系統錯誤(panic)。

    因為TDesC和TDes包含了所有函數需要的訪問、操作字串和記憶體資料的功能,所以許多隻需要訪問資料的函數用const TDesC&做為參數,那些需要修改資料的函數用TDes&做為參數。

  

指標描述符

    抽象描述符類有多種實現,其中最簡單的就是指標描述符。

    TPtrC僅僅包含長度與地址資訊:它只需要兩個機器字來表示。TPtrC可以被設定為表示任何現存的資料。TPtr增加了最大長度資訊,因此它可以用來表示那些未完全分配的緩衝區(buffer)。


  

    TPtrC和TPtr與C語言中的char*有點兒類似,但因為描述符自己包含了長度資訊,所以不再需要掃描結尾的Null 字元(‘/0’)或為它分配空間。

  

緩衝器描述符

    緩衝器描述符TBufC和TBuf中的資料就是自己的一部分,就像C語言中的字元數組(char[])。

  

    這種描述符使用C++的模板機制,通過一個整數參數指出緩衝器長度。

  

  

堆描述符

    堆描述符HbufC包含的資料是存放在堆上的。

  

    這就像C語言中的(char*)malloc( length+1 )一樣通常用於預先不能確定長度的情況。因為是在堆上分配的,它總是通過HBufC*使用而不是直接定義HBufC對象。

  

描述符類

   下面是完整的描述符類層次圖:

    體現出了使用物件導向的優雅性。TBufCBase只是為了考慮實現的方便性,這也是物件導向中常有的習慣(然而它需要小心使用)。

    描述符使得表示串列資料變的簡單。當描述符用於字串時,應該使用TDes(TDesC,TBuf…)等等,因為在Unicode編譯條件下,這些類通過typedef定義為TDes16(TDesC16,TBuf16…)等等。

    因為描述符可以包含任何資料,包括Null 字元,所以它可以被用來引用位元組資料和普通緩衝器。在需要8位元據的情況下(無論是什麼編譯條件,有可能是Unicode編譯條件),你應該總是直接使用TDes8等形式。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.