CStringData – třída
Tato třída představuje data objektu string.
Syntaxe
struct CStringData
Členové
Metody
Název | Popis |
---|---|
AddRef | Zvýší početodkazůch |
data | Načte data znaků objektu řetězce. |
IsLocked | Určuje, zda je vyrovnávací paměť přidruženého objektu řetězce uzamčena. |
IsShared | Určuje, zda je vyrovnávací paměť přidruženého objektu řetězce aktuálně sdílena. |
Uzamknout | Uzamkne vyrovnávací paměť přidruženého objektu řetězce. |
Vydaná verze | Uvolní zadaný objekt řetězce. |
Odemknout | Odemkne vyrovnávací paměť přidruženého objektu řetězce. |
Datové členy
Název | Popis |
---|---|
nAllocLength | Délka přidělených dat v XCHAR s (nezahrnuje ukončení null) |
nDataLength | Délka aktuálně použitých dat v XCHAR datech (nezahrnuje ukončení hodnoty null) |
nRefs | Aktuální počet odkazů objektu. |
pStringMgr | Ukazatel na správce řetězců tohoto objektu řetězce. |
Poznámky
Tuto třídu by měli používat jenom vývojáři, kteří implementují vlastní správce řetězců. Další informace o vlastních správcích řetězců naleznete v tématu Správa paměti a CStringT
Tato třída zapouzdřuje různé typy informací a dat přidružených k objektu vyššího řetězce, jako jsou CStringT, CSimpleStringT nebo CFixedStringT objekty. Každý objekt vyššího řetězce obsahuje ukazatel na přidružený CStringData
objekt, který umožňuje více řetězcovým objektům odkazovat na stejný objekt řetězcových dat. Tento vztah je reprezentován počtem odkazů (nRefs
) objektu CStringData
.
Poznámka:
V některých případech typ řetězce (například CFixedString
) nesdílí objekt dat řetězce s více než jedním objektem vyššího řetězce. Další informace o tom naleznete v tématu Správa paměti a CStringT.
Tato data se skládají z:
Správce paměti (typu IAtlStringMgr) řetězce.
Aktuální délka řetězce ( nDataLength).
Přidělená délka ( nAllocLength) řetězce. Z důvodů výkonu se to může lišit od aktuální délky řetězce.
Aktuální počet odkazů ( nRefs) objektu
CStringData
. Tato hodnota se používá k určení, kolik řetězcových objektů sdílí stejnýCStringData
objekt.Skutečná vyrovnávací paměť znaků ( data) řetězce.
Poznámka:
Skutečná vyrovnávací paměť znaků objektu řetězce je přidělena správcem řetězců a je připojena k objektu
CStringData
.
Požadavky
Hlavička: atlsimpstr.h
CStringData::AddRef
Zvýší počet odkazů objektu string.
void AddRef() throw();
Poznámky
Zvýší počet odkazů objektu string.
Poznámka:
Tuto metodu nevolejte u řetězce s záporným počtem odkazů, protože záporný počet označuje, že vyrovnávací paměť řetězce je uzamčena.
CStringData::d ata
Vrátí ukazatel na vyrovnávací paměť znaků objektu řetězce.
void* data() throw();
Návratová hodnota
Ukazatel na vyrovnávací paměť znaků objektu řetězce.
Poznámky
Voláním této funkce vrátíte aktuální vyrovnávací paměť znaků přidruženého objektu řetězce.
Poznámka:
Tato vyrovnávací paměť není přidělena CStringData
objektem, ale správcem řetězců v případě potřeby. Při přidělení se vyrovnávací paměť připojí k datovému objektu řetězce.
CStringData::IsLocked
Určuje, zda je vyrovnávací paměť znaku uzamčena.
bool IsLocked() const throw();
Návratová hodnota
Vrátí hodnotu TRUE, pokud je vyrovnávací paměť uzamčena; jinak NEPRAVDA.
Poznámky
Voláním této funkce určíte, jestli je aktuálně uzamčena vyrovnávací paměť znaků objektu řetězce.
CStringData::IsShared
Určuje, zda je sdílena vyrovnávací paměť znaků.
bool IsShared() const throw();
Návratová hodnota
Vrátí hodnotu TRUE, pokud je vyrovnávací paměť sdílena; jinak NEPRAVDA.
Poznámky
Voláním této funkce určíte, jestli je vyrovnávací paměť znaků datového objektu řetězce aktuálně sdílena mezi více řetězcovými objekty.
CStringData::Lock
Uzamkne vyrovnávací paměť znaků přidruženého objektu řetězce.
void Lock() throw();
Poznámky
Voláním této funkce zamknete vyrovnávací paměť znaků datového objektu řetězce. Uzamčení a odemčení se používá, když vývojář vyžaduje přímý přístup ke vyrovnávací paměti znaků. Dobrý příklad uzamčení je demonstrován LockBuffer a UnlockBuffer metody CSimpleStringT
.
Poznámka:
Vyrovnávací paměť znaků může být uzamčena pouze v případě, že vyrovnávací paměť není sdílena mezi objekty vyššího řetězce.
CStringData::nAllocLength
Délka přidělené vyrovnávací paměti znaků.
int nAllocLength;
Poznámky
Uloží délku přidělené vyrovnávací paměti dat do XCHAR
s (nezahrnuje ukončení hodnoty null).
CStringData::nDataLength
Aktuální délka objektu řetězce.
int nDataLength;
Poznámky
Uloží délku aktuálně použitých dat do XCHAR
s (nezahrnuje ukončení hodnoty null).
CStringData::nRefs
Počet odkazů datového objektu řetězce.
long nRefs;
Poznámky
Uloží počet odkazů datového objektu řetězce. Tento počet označuje počet objektů vyššího řetězce, které jsou přidruženy k objektu dat řetězce. Záporná hodnota označuje, že datový objekt řetězce je aktuálně uzamčen.
CStringData::p StringMgr
Správce paměti přidruženého objektu řetězce.
IAtlStringMgr* pStringMgr;
Poznámky
Uloží správce paměti pro přidružený objekt řetězce. Další informace o správcích paměti a řetězcích naleznete v tématu Správa paměti a CStringT.
CStringData::Release
Sníží počet odkazů datového objektu řetězce.
void Release() throw();
Poznámky
Voláním této funkce snížíte počet odkazů a uvolníte CStringData
strukturu, pokud počet odkazů dosáhne nuly. To se obvykle provádí při odstranění objektu řetězce, a proto už není nutné odkazovat na objekt dat řetězce.
Například následující kód by volal CStringData::Release
objekt dat řetězce přidružený str1
k:
{
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
Odemkne vyrovnávací paměť znaků přidruženého objektu řetězce.
void Unlock() throw();
Poznámky
Voláním této funkce odemknete vyrovnávací paměť znaků datového objektu řetězce. Jakmile je vyrovnávací paměť odemknutá, je možné ji sdílet a lze ji spočítat.
Poznámka:
Každé volání, které Lock
se má shodovat s odpovídajícím voláním Unlock
.
Uzamčení a odemykání se používá, když vývojář musí zajistit, aby se řetězcová data nesdíleli. Dobrý příklad uzamčení je demonstrován LockBuffer a UnlockBuffer metody CSimpleStringT
.