Classe CStringData
Questa classe rappresenta i dati di un oggetto stringa.
Sintassi
struct CStringData
Membri
Metodi
Nome | Descrizione |
---|---|
AddRef | Incrementa il conteggio dei riferimenti dell'oggetto dati stringa. |
data | Recupera i dati di tipo carattere di un oggetto stringa. |
IsLocked | Determina se il buffer dell'oggetto stringa associato è bloccato. |
IsShared | Determina se il buffer dell'oggetto stringa associato è attualmente condiviso. |
Blocca | Blocca il buffer dell'oggetto stringa associato. |
Versione | Rilascia l'oggetto stringa specificato. |
Aprire | Sblocca il buffer dell'oggetto stringa associato. |
Membri dei dati
Nome | Descrizione |
---|---|
nAllocLength | Lunghezza dei dati allocati in XCHAR s (senza includere la terminazione null) |
nDataLength | Lunghezza dei dati attualmente usati in XCHAR s (senza includere la terminazione null) |
nRefs | Conteggio dei riferimenti corrente dell'oggetto. |
pStringMgr | Puntatore al gestore di stringhe di questo oggetto stringa. |
Osservazioni:
Questa classe deve essere usata solo dagli sviluppatori che implementano gestioni stringhe personalizzate. Per altre informazioni sulle gestioni stringhe personalizzate, vedere Gestione della memoria e CStringT
Questa classe incapsula vari tipi di informazioni e dati associati a un oggetto stringa superiore, ad esempio CStringT, CSimpleStringT o oggetti CFixedStringT. Ogni oggetto stringa superiore contiene un puntatore all'oggetto associato CStringData
, consentendo a più oggetti stringa di puntare allo stesso oggetto dati stringa. Questa relazione è rappresentata dal conteggio dei riferimenti (nRefs
) dell'oggetto CStringData
.
Nota
In alcuni casi, un tipo stringa (ad esempio CFixedString
) non condividerà un oggetto dati stringa con più di un oggetto stringa superiore. Per altre informazioni, vedere Gestione della memoria e CStringT.
Questi dati sono costituiti da:
Gestione memoria (di tipo IAtlStringMgr) della stringa.
Lunghezza corrente ( nDataLength) della stringa.
Lunghezza allocata ( nAllocLength) della stringa. Per motivi di prestazioni, ciò può differire dalla lunghezza della stringa corrente
Conteggio dei riferimenti corrente ( nRefs) dell'oggetto
CStringData
. Questo valore viene usato per determinare il numero di oggetti stringa che condividono lo stessoCStringData
oggetto.Buffer di caratteri effettivo ( dati) della stringa.
Nota
Il buffer di caratteri effettivo dell'oggetto stringa viene allocato dal gestore di stringhe e viene accodato all'oggetto
CStringData
.
Requisiti
Intestazione: atlsimpstr.h
CStringData::AddRef
Incrementa il conteggio dei riferimenti dell'oggetto stringa.
void AddRef() throw();
Osservazioni:
Incrementa il conteggio dei riferimenti dell'oggetto stringa.
Nota
Non chiamare questo metodo su una stringa con un conteggio dei riferimenti negativi, poiché un conteggio negativo indica che il buffer di stringa è bloccato.
CStringData::d ata
Restituisce un puntatore al buffer di caratteri di un oggetto stringa.
void* data() throw();
Valore restituito
Puntatore al buffer di caratteri dell'oggetto stringa.
Osservazioni:
Chiamare questa funzione per restituire il buffer di caratteri corrente dell'oggetto stringa associato.
Nota
Questo buffer non viene allocato dall'oggetto CStringData
ma dal gestore di stringhe quando necessario. Se allocato, il buffer viene aggiunto all'oggetto dati stringa.
CStringData::IsLocked
Determina se il buffer dei caratteri è bloccato.
bool IsLocked() const throw();
Valore restituito
Restituisce TRUE se il buffer è bloccato; in caso contrario FALSE.
Osservazioni:
Chiamare questa funzione per determinare se il buffer di caratteri di un oggetto stringa è attualmente bloccato.
CStringData::IsShared
Determina se il buffer dei caratteri è condiviso.
bool IsShared() const throw();
Valore restituito
Restituisce TRUE se il buffer è condiviso; in caso contrario FALSE.
Osservazioni:
Chiamare questa funzione per determinare se il buffer di caratteri di un oggetto dati stringa è attualmente condiviso tra più oggetti stringa.
CStringData::Lock
Blocca il buffer di caratteri dell'oggetto stringa associato.
void Lock() throw();
Osservazioni:
Chiamare questa funzione per bloccare il buffer di caratteri dell'oggetto dati stringa. Il blocco e lo sblocco vengono usati quando l'accesso diretto al buffer dei caratteri è richiesto dallo sviluppatore. Un buon esempio di blocco è illustrato dai metodi LockBuffer e UnlockBuffer di CSimpleStringT
.
Nota
Un buffer di caratteri può essere bloccato solo se il buffer non è condiviso tra oggetti stringa superiori.
CStringData::nAllocLength
Lunghezza del buffer di caratteri allocato.
int nAllocLength;
Osservazioni:
Archivia la lunghezza del buffer di dati allocato in XCHAR
s (senza includere la terminazione null).
CStringData::nDataLength
Lunghezza corrente dell'oggetto stringa.
int nDataLength;
Osservazioni:
Archivia la lunghezza dei dati attualmente usati in XCHAR
s (senza includere la terminazione null).
CStringData::nRefs
Conteggio dei riferimenti dell'oggetto dati stringa.
long nRefs;
Osservazioni:
Archivia il conteggio dei riferimenti dell'oggetto dati stringa. Questo conteggio indica il numero di oggetti stringa più elevati associati all'oggetto dati stringa. Un valore negativo indica che l'oggetto dati stringa è attualmente bloccato.
CStringData::p StringMgr
Gestore della memoria dell'oggetto stringa associato.
IAtlStringMgr* pStringMgr;
Osservazioni:
Archivia il gestore della memoria per l'oggetto stringa associato. Per altre informazioni su gestioni memoria e stringhe, vedere Gestione della memoria e CStringT.
CStringData::Release
Decrementa il conteggio dei riferimenti dell'oggetto dati stringa.
void Release() throw();
Osservazioni:
Chiamare questa funzione per decrementare il conteggio dei riferimenti, liberando la CStringData
struttura se il conteggio dei riferimenti raggiunge zero. Questa operazione viene in genere eseguita quando un oggetto stringa viene eliminato e pertanto non deve più fare riferimento all'oggetto dati stringa.
Ad esempio, il codice seguente chiamerebbe CStringData::Release
per l'oggetto dati stringa associato a 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
Sblocca il buffer di caratteri dell'oggetto stringa associato.
void Unlock() throw();
Osservazioni:
Chiamare questa funzione per sbloccare il buffer di caratteri dell'oggetto dati stringa. Una volta sbloccato un buffer, è condivisibile e può essere conteggiato come riferimento.
Nota
Ogni chiamata a Lock
deve essere confrontata con una chiamata corrispondente a Unlock
.
Il blocco e lo sblocco vengono usati quando lo sviluppatore deve assicurarsi che i dati stringa non vengano condivisi. Un buon esempio di blocco è illustrato dai metodi LockBuffer e UnlockBuffer di CSimpleStringT
.