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 XCHAR s (ohne Beendigung von NULL) |
nDataLength | Länge der aktuell verwendeten Daten in XCHAR s (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 dasselbeCStringData
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 XCHAR
s (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 XCHAR
s (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