CStringData-Klasse

Diese Klasse stellt die Daten eines Zeichenfolgenobjekts dar.

Syntax

struct CStringData

Member

Methoden

Name Beschreibung
AddRef Erhöht die Referenzanzahl des Zeichenfolgendatenobjekts.
data Ruft die Zeichendaten eines Zeichenfolgenobjekts ab.
IsLocked Bestimmt, ob der Puffer des zugeordneten Zeichenfolgenobjekts gesperrt ist.
IsShared Bestimmt, ob der Puffer des zugeordneten Zeichenfolgenobjekts zurzeit freigegeben ist.
Sperren Sperrt den Puffer des zugeordneten Zeichenfolgenobjekts.
Release Gibt das angegebene Zeichenfolgenobjekt frei.
Entsperren Entsperrt den Puffer des zugeordneten Zeichenfolgenobjekts.

Datenelemente

Name Beschreibung
nAllocLength Länge der zugeordneten Daten in XCHARs (ohne Beendigung von NULL)
nDataLength Länge der aktuell verwendeten Daten in XCHARs (nicht einschließlich Beenden von NULL)
nRefs Die aktuelle Verweisanzahl des Objekts.
pStringMgr Ein Zeiger auf den Zeichenfolgen-Manager dieses Zeichenfolgenobjekts.

Hinweise

Diese Klasse sollte nur von Entwicklern verwendet werden, die benutzerdefinierte Zeichenfolgenmanager implementieren. Weitere Informationen zu benutzerdefinierten Zeichenfolgen-Managern finden Sie unter Speicherverwaltung und CStringT

Diese Klasse kapselt verschiedene Arten von Informationen und Daten, die einem höheren Zeichenfolgenobjekt zugeordnet sind, z . B. CStringT, CSimpleStringT oder CFixedStringT-Objekte . Jedes höhere Zeichenfolgenobjekt enthält einen Zeiger auf das zugeordnete CStringData Objekt, sodass mehrere Zeichenfolgenobjekte auf dasselbe Zeichenfolgendatenobjekt verweisen können. Diese Beziehung wird durch die Verweisanzahl (nRefs) des CStringData Objekts dargestellt.

Hinweis

In bestimmten Fällen verwendet ein Zeichenfolgentyp (z CFixedString. B. ) kein Zeichenfolgendatenobjekt mit mehr als einem höheren Zeichenfolgenobjekt. Weitere Informationen hierzu finden Sie unter Speicherverwaltung und CStringT.

Diese Daten bestehen aus:

  • Der Speicher-Manager (vom Typ IAtlStringMgr) der Zeichenfolge.

  • Die aktuelle Länge ( nDataLength) der Zeichenfolge.

  • Die zugewiesene Länge ( nAllocLength) der Zeichenfolge. Aus Leistungsgründen kann sich dies von der aktuellen Zeichenfolgenlänge unterscheiden.

  • Die aktuelle Verweisanzahl ( nRefs) des CStringData Objekts. Dieser Wert wird verwendet, um zu bestimmen, wie viele Zeichenfolgenobjekte dasselbe CStringData Objekt gemeinsam nutzen.

  • Der tatsächliche Zeichenpuffer ( Daten) der Zeichenfolge.

    Hinweis

    Der tatsächliche Zeichenpuffer des Zeichenfolgenobjekts wird vom Zeichenfolgen-Manager zugewiesen und an das CStringData Objekt angefügt.

Anforderungen

Kopfzeile: atlsimpstr.h

CStringData::AddRef

Erhöht die Referenzanzahl des Zeichenfolgenobjekts.

void AddRef() throw();

Hinweise

Erhöht die Referenzanzahl des Zeichenfolgenobjekts.

Hinweis

Rufen Sie diese Methode nicht für eine Zeichenfolge mit einer negativen Bezugsanzahl auf, da eine negative Anzahl angibt, dass der Zeichenfolgenpuffer gesperrt ist.

CStringData::d ata

Gibt einen Zeiger auf den Zeichenpuffer eines Zeichenfolgenobjekts zurück.

void* data() throw();

Rückgabewert

Ein Zeiger auf den Zeichenpuffer des Zeichenfolgenobjekts.

Hinweise

Rufen Sie diese Funktion auf, um den aktuellen Zeichenpuffer des zugeordneten Zeichenfolgenobjekts zurückzugeben.

Hinweis

Dieser Puffer wird nicht vom CStringData Objekt, sondern vom Zeichenfolgen-Manager bei Bedarf zugewiesen. Bei der Zuordnung wird der Puffer an das Zeichenfolgendatenobjekt angefügt.

CStringData::IsLocked

Bestimmt, ob der Zeichenpuffer gesperrt ist.

bool IsLocked() const throw();

Rückgabewert

Gibt WAHR zurück, wenn der Puffer gesperrt ist; andernfalls FALSE.

Hinweise

Rufen Sie diese Funktion auf, um festzustellen, ob der Zeichenpuffer eines Zeichenfolgenobjekts momentan gesperrt ist.

CStringData::IsShared

Bestimmt, ob der Zeichenpuffer freigegeben ist.

bool IsShared() const throw();

Rückgabewert

Gibt WAHR zurück, wenn der Puffer freigegeben ist; andernfalls FALSE.

Hinweise

Rufen Sie diese Funktion auf, um zu ermitteln, ob der Zeichenpuffer eines Zeichenfolgendatenobjekts derzeit für mehrere Zeichenfolgenobjekte freigegeben ist.

CStringData::Lock

Sperrt den Zeichenpuffer des zugeordneten Zeichenfolgenobjekts.

void Lock() throw();

Hinweise

Rufen Sie diese Funktion auf, um den Zeichenpuffer des Zeichenfolgendatenobjekts zu sperren. Das Sperren und Entsperren wird verwendet, wenn der direkte Zugriff auf den Zeichenpuffer vom Entwickler benötigt wird. Ein gutes Beispiel für das Sperren ist die LockBuffer- und UnlockBuffer-Methode von .CSimpleStringT

Hinweis

Ein Zeichenpuffer kann nur gesperrt werden, wenn der Puffer nicht für höhere Zeichenfolgenobjekte freigegeben wird.

CStringData::nAllocLength

Länge des zugewiesenen Zeichenpuffers.

int nAllocLength;

Hinweise

Speichert die Länge des zugeordneten Datenpuffers in XCHARs (nicht einschließlich des Beendens von NULL).

CStringData::nDataLength

Aktuelle Länge des Zeichenfolgenobjekts.

int nDataLength;

Hinweise

Speichert die Länge der aktuell verwendeten Daten in XCHARs (nicht einschließlich des Beendens von NULL).

CStringData::nRefs

Referenzanzahl des Zeichenfolgendatenobjekts.

long nRefs;

Hinweise

Speichert die Referenzanzahl des Zeichenfolgendatenobjekts. Diese Anzahl gibt die Anzahl höherer Zeichenfolgenobjekte an, die dem Zeichenfolgendatenobjekt zugeordnet sind. Ein negativer Wert gibt an, dass das Zeichenfolgendatenobjekt momentan gesperrt ist.

CStringData::p StringMgr

Der Speicher-Manager des zugeordneten Zeichenfolgenobjekts.

IAtlStringMgr* pStringMgr;

Hinweise

Speichert den Speicher-Manager für das zugeordnete Zeichenfolgenobjekt. Weitere Informationen zu Speichermanagern und Zeichenfolgen finden Sie unter Speicherverwaltung und CStringT.

CStringData::Release

Erhöht die Referenzanzahl des Zeichenfolgendatenobjekts.

void Release() throw();

Hinweise

Rufen Sie diese Funktion auf, um die Referenzanzahl zu verringern, wobei die CStringData Struktur freigegeben wird, wenn die Referenzanzahl null erreicht. Dies geschieht häufig, wenn ein Zeichenfolgenobjekt gelöscht wird und daher nicht mehr auf das Zeichenfolgendatenobjekt verweisen muss.

Beispielsweise würde der folgende Code für das Zeichenfolgendatenobjekt aufgerufen CStringData::Release , das zugeordnet ist 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

Entsperrt den Zeichenpuffer des zugeordneten Zeichenfolgenobjekts.

void Unlock() throw();

Hinweise

Rufen Sie diese Funktion auf, um den Zeichenpuffer des Zeichenfolgendatenobjekts zu entsperren. Sobald ein Puffer entsperrt ist, kann er freigegeben werden und kann auf gezählt werden.

Hinweis

Jeder Anruf muss Lock mit einem entsprechenden Anruf abgeglichen werden.Unlock

Das Sperren und Entsperren wird verwendet, wenn der Entwickler sicherstellen muss, dass die Zeichenfolgendaten nicht freigegeben werden. Ein gutes Beispiel für das Sperren ist die LockBuffer- und UnlockBuffer-Methode von .CSimpleStringT

Siehe auch

Hierarchiediagramm
ATL/MFC Shared Classes