CStringData クラス
このクラスは、文字列オブジェクトのデータを表します。
構文
struct CStringData
メンバー
メソッド
Name | 説明 |
---|---|
AddRef | 文字列データ オブジェクトの参照カウンターをインクリメントします。 |
data | 文字列オブジェクトの文字データを取得します。 |
IsLocked | 関連付けられた文字列オブジェクトのバッファーがロックされているかどうかを判断します。 |
IsShared | 関連付けられた文字列オブジェクトのバッファーが現在共有されているかどうかを判断します。 |
ロック | 関連付けられた文字列オブジェクトのバッファーをロックします。 |
リリース | 指定した文字列オブジェクトをリリースします。 |
Unlock | 関連付けられた文字列オブジェクトのバッファーのロックを解除します。 |
データ メンバー
名前 | 説明 |
---|---|
nAllocLength | XCHAR で割り当てられたデータの長さ (終端の null は含まない) |
nDataLength | XCHAR 内で現在使用されているデータの長さ (終端の null は含まない) |
nRefs | オブジェクトの現在の参照数。 |
pStringMgr | この文字列オブジェクトの文字列マネージャーへのポインター。 |
解説
このクラスの使用は、カスタム文字列マネージャーを実装する開発者のみに限定する必要があります。 カスタム文字列マネージャーの詳細については、メモリ管理と CStringT に関するページを参照してください。
このクラスによって、上位の文字列オブジェクト (CStringT、CSimpleStringT、CFixedStringT オブジェクトなど) に関連付けられたさまざまな種類の情報およびデータがカプセル化されます。 上位の文字列オブジェクトのいずれにも、それに関連する CStringData
オブジェクトへのポインターが含まれています。これにより、複数の文字列オブジェクトで、同じ文字列データ オブジェクトを指すことができます。 このリレーションシップは、CStringData
オブジェクトの参照カウント (nRefs
) によって表されます。
Note
文字列型 (CFixedString
など) では、文字列データ オブジェクトを、複数の上位の文字列オブジェクトと共有しない場合もあります。 このことの詳細については、「CStringT を使用したメモリ管理」を参照してください。
このデータは次のもので構成されます。
文字列のメモリ マネージャー (IAtlStringMgr 型)。
文字列の現在の長さ (nDataLength)。
文字列の割り当て済みの長さ (nAllocLength)。 パフォーマンス上の理由から、これは現在の文字列の長さと異なる場合があります。
CStringData
オブジェクトの現在の参照数 (nRefs)。 この値は、同じCStringData
オブジェクトを共有する文字列オブジェクトの数を決定するために使用されます。文字列の実際の文字バッファー (data)。
Note
文字列オブジェクトの実際の文字バッファーは、文字列マネージャーによって割り当てられ、
CStringData
オブジェクトに追加されます。
要件
ヘッダー: atlsimpstr.h
CStringData::AddRef
文字列オブジェクトの参照数をインクリメントします。
void AddRef() throw();
解説
文字列オブジェクトの参照数をインクリメントします。
Note
負の参照数は文字列バッファーがロックされていることを示すため、数が負になっている文字列に対してこのメソッドを呼び出さないでください。
CStringData::data
文字列オブジェクトの文字バッファーへのポインターを返します。
void* data() throw();
戻り値
文字列オブジェクトの文字バッファーへのポインター。
解説
この関数を呼び出して、関連付けられている文字列オブジェクトの現在の文字バッファーを返します。
Note
このバッファーは、CStringData
オブジェクトによって割り当てられるのではなく、必要に応じて文字列マネージャーによって割り当てられます。 バッファーは割り当てられると、文字列データ オブジェクトに追加されます。
CStringData::IsLocked
文字バッファーがロックされているかどうかを判断します。
bool IsLocked() const throw();
戻り値
バッファーがロックされている場合は TRUE を返します。それ以外の場合は FALSE を返します。
解説
文字列オブジェクトの文字バッファーが現在ロックされているかどうかを判断するには、この関数を呼び出します。
CStringData::IsShared
文字バッファーが共有されているかどうかを判断します。
bool IsShared() const throw();
戻り値
バッファーが共有されている場合は TRUE を返します。それ以外の場合は FALSE を返します。
解説
文字列データ オブジェクトの文字バッファーが、現在、複数の文字列オブジェクト間で共有されているかどうかを判断するには、この関数を呼び出します。
CStringData::Lock
関連付けられている文字列オブジェクトの文字バッファーをロックします。
void Lock() throw();
解説
文字列データ オブジェクトの文字バッファーをロックするには、この関数を呼び出します。 ロックとロック解除は、文字バッファーへの直接アクセスが開発者に必要な場合に使用されます。 ロックの例としては、CSimpleStringT
の LockBuffer および UnlockBuffer メソッドが挙げられます。
Note
文字バッファーは、上位の文字列オブジェクト間で共有されていない場合にのみ、ロックすることができます。
CStringData::nAllocLength
割り当てられた文字バッファーの長さ。
int nAllocLength;
解説
割り当てられたデータ バッファーの長さを XCHAR
に格納します (終端の null は含まれません)。
CStringData::nDataLength
文字列オブジェクトの現在の長さ。
int nDataLength;
解説
XCHAR
内で現在使用されているデータの長さ (終端の null は含まない) を格納します。
CStringData::nRefs
文字列データ オブジェクトの参照数。
long nRefs;
解説
文字列データ オブジェクトの参照数を格納します。 この数は、文字列データ オブジェクトに関連付けられている上位の文字列オブジェクトの数を示します。 負の値は、文字列データ オブジェクトが現在ロックされている状態にあることを示します。
CStringData::pStringMgr
関連付けられた文字列オブジェクトのメモリ マネージャー。
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();
解説
文字列データ オブジェクトの文字バッファーのロックを解除するには、この関数を呼び出します。 バッファーは、ロックが解除されると、共有可能となり、参照をカウントできます。
Note
Lock
の各呼び出しは、Unlock
の対応する呼び出しと一致する必要があります。
ロックとロック解除が使用されるのは、開発者が、文字列データを決して共有されないようにしなければならない場合です。 ロックの例としては、CSimpleStringT
の LockBuffer および UnlockBuffer メソッドが挙げられます。