CStringData 類別

這個類別代表字串對象的數據。

語法

struct CStringData

成員

方法

名稱 描述
AddRef 遞增字串數據對象的參考計數。
data 擷取字串物件的字元數據。
IsLocked 判斷關聯字串對象的緩衝區是否已鎖定。
IsShared 判斷關聯字串對象的緩衝區目前是否共用。
鎖定 鎖定相關聯字串對象的緩衝區。
版本 釋放指定的字串物件。
開鎖 解除鎖定相關聯字串對象的緩衝區。

資料成員

名稱 描述
nAllocLength XCHAR已設定資料的長度(不包括終止 Null)
nDataLength s 中 XCHAR目前使用資料的長度(不包括終止 Null)
nRefs 物件的目前參考計數。
pStringMgr 這個字串物件的字串管理員指標。

備註

這個類別應該只供實作自定義字串管理員的開發人員使用。 如需自定義字串管理員的詳細資訊,請參閱 記憶體管理和 CStringT

這個類別會封裝與較高字串對象相關聯的各種資訊和數據,例如 CStringTCSimpleStringTCFixedStringT 物件。 每個較高的字串物件都包含其相關聯 CStringData 物件的指標,允許多個字元串物件指向相同的字串數據物件。 這個關聯性是由 對象的參考計數 (nRefsCStringData 表示。

注意

在某些情況下,字串類型 (例如 CFixedString) 不會與一個以上的字串對象共用字串資料物件。 如需詳細資訊,請參閱 記憶體管理和 CStringT

此資料是由:

  • 字串的記憶體管理員(類型 為 IAtlStringMgr)。

  • 字串的目前長度 ( nDataLength)。

  • 字串的配置長度 ( nAllocLength)。 基於效能考慮,這可能與目前的字串長度不同

  • 物件的目前參考計數 (nRefs)。CStringData 此值用於判斷共用相同 CStringData 物件的字串對象數量。

  • 字串的實際字元緩衝區( 數據)。

    注意

    字串對象的實際字元緩衝區是由字串管理員所配置,並附加至 CStringData 物件。

需求

標頭: atlsimpstr.h

CStringData::AddRef

遞增字串對象的參考計數。

void AddRef() throw();

備註

遞增字串對象的參考計數。

注意

請勿在具有負參考計數的字串上呼叫這個方法,因為負數表示字串緩衝區已鎖定。

CStringData::d ata

傳回字串物件的字元緩衝區指標。

void* data() throw();

傳回值

字串物件的字元緩衝區指標。

備註

呼叫此函式以傳回相關聯字串物件的目前字元緩衝區。

注意

此緩衝區不是由 物件配置, CStringData 而是由字串管理員在需要時配置。 配置時,緩衝區會附加至字串數據物件。

CStringData::IsLocked

判斷字元緩衝區是否已鎖定。

bool IsLocked() const throw();

傳回值

如果緩衝區已鎖定,則傳回 TRUE;否則為 FALSE。

備註

呼叫此函式,以判斷字串物件的字元緩衝區目前是否已鎖定。

CStringData::IsShared

判斷字元緩衝區是否共用。

bool IsShared() const throw();

傳回值

如果共用緩衝區,則傳回 TRUE;否則為 FALSE。

備註

呼叫此函式,以判斷字串數據物件的字元緩衝區目前是否在多個字串物件之間共用。

CStringData::Lock

鎖定相關聯字串物件的字元緩衝區。

void Lock() throw();

備註

呼叫此函式來鎖定字串數據物件的字元緩衝區。 開發人員需要直接存取字元緩衝區時,會使用鎖定和解除鎖定。 鎖定的良好範例是由 的LockBufferUnlockBuffer 方法 CSimpleStringT示範。

注意

只有當緩衝區未在較高的字串對象之間共用時,才能鎖定字元緩衝區。

CStringData::nAllocLength

配置字元緩衝區的長度。

int nAllocLength;

備註

將配置的數據緩衝區長度儲存在 XCHARs 中(不包括終止 Null)。

CStringData::nDataLength

字串物件的目前長度。

int nDataLength;

備註

將目前使用的數據長度儲存在 XCHARs 中(不包括終止 Null)。

CStringData::nRefs

字串資料對象的參考計數。

long nRefs;

備註

儲存字串資料對象的參考計數。 此計數表示與字串數據對象相關聯的較高字串物件數目。 負值表示字串數據物件目前已鎖定。

CStringData::p StringMgr

相關聯字串物件的記憶體管理員。

IAtlStringMgr* pStringMgr;

備註

儲存相關聯字串物件的記憶體管理員。 如需記憶體管理員和字串的詳細資訊,請參閱 記憶體管理和 CStringT

CStringData::Release

遞減字串數據對象的參考計數。

void Release() throw();

備註

呼叫此函式以遞減參考計數,如果參考計數達到零,則會 CStringData 釋放 結構。 這通常是在刪除字串物件時完成,因此不再需要參考字串數據物件。

例如,下列程式代碼會針對與str1相關聯的字串資料物件呼叫 CStringData::Release

{
   CString str1 = _T("Hello world");  // Allocates new CStringData
}
// str1 is deleted when it goes out of scope, so it releases its string data   

CStringData::Unlock

解除鎖定相關聯字串物件的字元緩衝區。

void Unlock() throw();

備註

呼叫此函式以解除鎖定字串數據物件的字元緩衝區。 一旦解除鎖定緩衝區,就可以共用,而且可以計算參考計數。

注意

對的每個呼叫 Lock 都必須與 對應的呼叫 Unlock相符。

當開發人員必須確保不會共用字串數據時,會使用鎖定和解除鎖定。 鎖定的良好範例是由 的LockBufferUnlockBuffer 方法 CSimpleStringT示範。

另請參閱

階層架構圖表
ATL/MFC 共享類別