CStringData, klasa
Ta klasa reprezentuje dane obiektu ciągu.
Składnia
struct CStringData
Elementy członkowskie
Metody
Nazwa/nazwisko | opis |
---|---|
AddRef | Zwiększa liczbę odwołań obiektu danych ciągu. |
data | Pobiera dane znaków obiektu ciągu. |
IsLocked | Określa, czy bufor skojarzonego obiektu ciągu jest zablokowany. |
IsShared | Określa, czy bufor skojarzonego obiektu ciągu jest obecnie współużytkowany. |
Zablokuj | Blokuje bufor skojarzonego obiektu ciągu. |
Wydanie | Zwalnia określony obiekt ciągu. |
Odblokować | Odblokuje bufor skojarzonego obiektu ciągu. |
Składowe danych
Nazwa/nazwisko | opis |
---|---|
nAllocLength | Długość przydzielonych danych w XCHAR s (nie dotyczy to zakończenia wartości null) |
nDataLength | Długość aktualnie używanych danych w XCHAR s (nie dotyczy to zakończenia wartości null) |
nRefs | Bieżąca liczba odwołań obiektu. |
pStringMgr | Wskaźnik do menedżera ciągów tego obiektu ciągu. |
Uwagi
Ta klasa powinna być używana tylko przez deweloperów wdrażających niestandardowe menedżery ciągów. Aby uzyskać więcej informacji na temat niestandardowych menedżerów ciągów, zobacz Zarządzanie pamięcią i CStringT
Ta klasa hermetyzuje różne typy informacji i danych skojarzonych z wyższym obiektem ciągu, takimi jak CStringT, CSimpleStringT lub CFixedStringT. Każdy obiekt wyższego ciągu zawiera wskaźnik do skojarzonego CStringData
obiektu, dzięki czemu wiele obiektów ciągów może wskazywać ten sam obiekt danych ciągu. Ta relacja jest reprezentowana przez liczbę odwołań (nRefs
) CStringData
obiektu.
Uwaga
W niektórych przypadkach typ ciągu (taki jak CFixedString
) nie współużytkuje obiektu danych ciągu z więcej niż jednym obiektem ciągu. Aby uzyskać więcej informacji na ten temat, zobacz Zarządzanie pamięcią i CStringT.
Te dane składają się z następujących elementów:
Menedżer pamięci (typu IAtlStringMgr) ciągu.
Bieżąca długość ( nDataLength) ciągu.
Przydzielona długość ( nAllocLength) ciągu. Ze względu na wydajność może to różnić się od bieżącej długości ciągu
Bieżąca liczba odwołań ( nRefs)
CStringData
obiektu. Ta wartość jest używana w określaniu, ile obiektów ciągów współużytkuje ten samCStringData
obiekt.Rzeczywisty bufor znaków ( dane) ciągu.
Uwaga
Rzeczywisty bufor znaków obiektu ciągu jest przydzielany przez menedżera ciągów i jest dołączany do
CStringData
obiektu.
Wymagania
Nagłówek: atlsimpstr.h
CStringData::AddRef
Zwiększa liczbę odwołań obiektu string.
void AddRef() throw();
Uwagi
Zwiększa liczbę odwołań obiektu string.
Uwaga
Nie należy wywoływać tej metody w ciągu z ujemną liczbą odwołań, ponieważ liczba ujemna wskazuje, że bufor ciągu jest zablokowany.
CStringData::d ata
Zwraca wskaźnik do bufora znaków obiektu ciągu.
void* data() throw();
Wartość zwracana
Wskaźnik do buforu znaków obiektu ciągu.
Uwagi
Wywołaj tę funkcję, aby zwrócić bieżący bufor znaków skojarzonego obiektu ciągu.
Uwaga
Ten bufor nie jest przydzielany przez obiekt, CStringData
ale przez menedżera ciągów w razie potrzeby. Po przydzieleniu bufor jest dołączany do obiektu danych ciągu.
CStringData::IsLocked
Określa, czy bufor znaków jest zablokowany.
bool IsLocked() const throw();
Wartość zwracana
Zwraca wartość TRUE, jeśli bufor jest zablokowany; w przeciwnym razie FAŁSZ.
Uwagi
Wywołaj tę funkcję, aby określić, czy bufor znaków obiektu ciągu jest obecnie zablokowany.
CStringData::IsShared
Określa, czy bufor znaków jest współużytkowany.
bool IsShared() const throw();
Wartość zwracana
Zwraca wartość TRUE, jeśli bufor jest współużytkowany; w przeciwnym razie FAŁSZ.
Uwagi
Wywołaj tę funkcję, aby określić, czy bufor znaków obiektu danych ciągu jest obecnie współużytkowany przez wiele obiektów ciągów.
CStringData::Lock
Blokuje bufor znaków skojarzonego obiektu ciągu.
void Lock() throw();
Uwagi
Wywołaj tę funkcję, aby zablokować bufor znaków obiektu danych ciągu. Blokowanie i odblokowywanie jest używane, gdy deweloper wymaga bezpośredniego dostępu do buforu znaków. Dobrym przykładem blokowania jest metoda LockBuffer i UnlockBuffer klasy CSimpleStringT
.
Uwaga
Bufor znaków można zablokować tylko wtedy, gdy bufor nie jest współużytkowany między obiektami wyższego ciągu.
CStringData::nAllocLength
Długość przydzielonego buforu znaków.
int nAllocLength;
Uwagi
Przechowuje długość przydzielonego buforu danych w XCHAR
s (nie obejmuje zakończenia wartości null).
CStringData::nDataLength
Bieżąca długość obiektu ciągu.
int nDataLength;
Uwagi
Przechowuje długość aktualnie używanych danych w XCHAR
s (nie obejmuje zakończenia wartości null).
CStringData::nRefs
Liczba odwołań do obiektu danych ciągu.
long nRefs;
Uwagi
Przechowuje liczbę odwołań obiektu danych ciągu. Ta liczba wskazuje liczbę obiektów wyższych ciągów skojarzonych z obiektem danych ciągu. Wartość ujemna wskazuje, że obiekt danych ciągu jest obecnie zablokowany.
CStringData::p StringMgr
Menedżer pamięci skojarzonego obiektu ciągu.
IAtlStringMgr* pStringMgr;
Uwagi
Przechowuje menedżera pamięci dla skojarzonego obiektu ciągu. Aby uzyskać więcej informacji na temat menedżerów pamięci i ciągów, zobacz Zarządzanie pamięcią i CStringT.
CStringData::Release
Dekrementuje liczbę odwołań obiektu danych ciągu.
void Release() throw();
Uwagi
Wywołaj tę funkcję, aby zdekrementować liczbę odwołań, zwalniając CStringData
strukturę, jeśli liczba odwołań osiągnie zero. Jest to często wykonywane po usunięciu obiektu ciągu i dlatego nie musi już odwoływać się do obiektu danych ciągu.
Na przykład następujący kod wywoła obiekt CStringData::Release
danych ciągu skojarzony z elementem str1
:
{
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
Odblokuje bufor znaków skojarzonego obiektu ciągu.
void Unlock() throw();
Uwagi
Wywołaj tę funkcję, aby odblokować bufor znaków obiektu danych ciągu. Po odblokowaniu buforu można go udostępnić i można go odliczyć.
Uwaga
Każde wywołanie Lock
musi być zgodne z odpowiednim wywołaniem metody Unlock
.
Blokowanie i odblokowywanie jest używane, gdy deweloper musi upewnić się, że dane ciągu nie są udostępniane. Dobrym przykładem blokowania jest metoda LockBuffer i UnlockBuffer klasy CSimpleStringT
.