Udostępnij za pośrednictwem


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 XCHARs (nie dotyczy to zakończenia wartości null)
nDataLength Długość aktualnie używanych danych w XCHARs (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 sam CStringData 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 XCHARs (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 XCHARs (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.

Zobacz też

Wykres hierarchii
Klasy udostępnione ATL/MFC