Symbian 基礎總結 --類類型

原文出自: http://www.cnblogs.com/felixYeou/archive/2008/11/20/1337567.html

 

Symbian OS上的應用程序使用4種常用的類,它們是:
以T開頭的值類,這種類不擁有任何外部對象,只是通過指針直接引用或通過句柄間接引用外部對象。
以C開頭的基於堆分配的類,這種類全部是從CBase派生過來的。
以R開頭的資源類,R類對象包含其它位置擁有資源的句柄。
以M開頭的接口類,這種類定義了接口但需要派生類實現。
這些類與清除機制的需求相關,具體細節請參考SDK(Developer Library » Symbian OS Guide » C++ API guide » Base » Memory Management » Using Cleanup Support » Cleanup Stack Basics » Cleanup requirements)。
值類型:T類
最基本的類是值類型,它們的名字以T開頭。
T類包含有它們的值,但這它們不擁有任何外部對象,只是通過指針直接引用或通過句柄間接引用外部對象。
T類可以在棧上分配(C++自動變量),也可以是其它類的成員。
T類的基本特徵將在下面講述。
構造函數:
許多T類非常簡單以至於根本不需要構造函數,那些包含有構造函數的,是通過構造函數初始化成員數據。
拷貝構造函數和賦值運算符:
拷貝構造函數(TX(const TX&))和賦值操作符(TX& operator=(const TX&))很少需要,這是因爲拷貝是淺拷貝,T類幾乎都是按成員進行拷貝。C++編譯器會產生缺省的拷貝構造函數和賦值操作符。
當T類是有一個整數參數的模板類時會需要這兩個函數,這種情況下,拷貝或賦值TX<32>到TX<40> 比按位拷貝要複雜一些,因此需要明確實現拷貝構造函數和賦值操作符。
析構函數:
T類不需要析構函數,因爲當T類生命週期結束後沒有需要清除的外部資源。
消毀
T類可以安全的在棧上消毀,消毀意味着不用通過析構函數就可以釋放內存。因爲T類自己不擁有外部資源,所以當T類對象被消毀時不會有外部資源變的不可訪問。
函數參數
做爲函數參數時T類可以通過值和引用進行傳遞。
數據成員
T類可以包含其它T類對象,另外,可以包含R類對象或C類對象的指針,包含的這些對象是通過另一個類或函數進行清除的,在實踐中,很少用這種方法。
標準類層次:C類和CBase類
使用最多的類除了T類還有C類,C類是直接或間接從CBase類派生出來的。
從CBase派生的類有下面的特性:
它們總是在堆上而不是棧上創建,並且不做爲其它類的成員。
分配程序會把類層次中的成員數據初按二進制0初始化。
它們通過指針或引用傳遞,並且不需要拷貝構造函數和重載賦值運算符,除非確定某個類確實需要支持拷貝操作。
它們不用通常的構造方法,因爲在通常的構造過程中可能會有leave發生,習慣上通過一個二階段構造(two-phase construction)來實現,C++中的構造函數只負責那些不會產生leave的構造,然後在一個名爲ConstructL()的函數中處理那些可能會產生leave的構造。
它們有一個虛析構函數,它被用來進行標準的清除過程。
因爲有一個虛析構函數,C類對象可以很簡單的使用清除(cleanup stack)進行清除;另外,因爲C類對象是在堆(heap)上分配的,當有leave發生時,它們必需要被清除:這要求在處理所有C類對象時必須要有清除的意識。
C類的具體要求請查看SDK文檔(Developer Library » Symbian OS Guide » C++ API guide » Base » Memory Management » Using Cleanup Support » Two Phase Construction)。
資源類型:R類
R 類是其它地方對象的代理,這樣做有兩個主要的動機:
直正的對象是一個server擁有的,在不同的線程或地址空間。
真正的對象對client來說必須是隱藏的。
下面是R類對象的關鍵特徵:
它們含有一個用來傳遞請求到另一個對象的句柄。
R類通常用名爲“open”的函數打開,用名爲“close”的函數關閉。一個R類對象打開後必須被關閉。通常如果打開資源的線程關閉後與R類對象關聯的資源被自動關閉。
它們可以直接按位拷貝。
它們沒有構造函數,析構函數,拷貝構造函數或重載賦值運算符。
R類使用許多協議來處理這些需求:
R類間的句柄特徵可能是不同的。
R類沒有共用基類。
初始化函數可能有許多名字:可能是Open(), Create(), Allocate()等等。
終止函數可能有許多名字:可能是Close(), Destroy(), Free()等等。
因爲R類擁有外部對象,在清除時就有一些要求:這些要求根據不同的類有不同的處理方法。
接口類型:M類
M類定義抽象協議或接口,具體的實現由派生類提供。
M類有下面的限制:
它們不可以有數據成員。
l 它們不可以有構造函數、析構函數,或者重載的操作符,比如‘=’。
M類常常包含定義完全抽象接口的純虛函數。一些M類在上面的限制內實現一些或全部的成員函數。
M類是Symbian OS中唯一使用多重繼承的方法。更多細節請查看SDK文檔(» Developer Library » Symbian OS Guide » Essential idioms » Multiple inheritance and interfaces)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章