CStringData, classe
Cette classe représente les données d’un objet string.
Syntaxe
struct CStringData
Membres
Méthodes
Nom | Description |
---|---|
AddRef | Incrémente le nombre de références de l’objet de données de chaîne. |
data | Récupère les données de caractères d’un objet de chaîne. |
IsLocked | Détermine si la mémoire tampon de l’objet chaîne associé est verrouillée. |
IsShared | Détermine si la mémoire tampon de l’objet chaîne associé est actuellement partagée. |
Verrouiller | Verrouille la mémoire tampon de l’objet de chaîne associé. |
Version release | Libère l’objet de chaîne spécifié. |
Déverrouiller | Déverrouille la mémoire tampon de l’objet de chaîne associé. |
Données membres
Nom | Description |
---|---|
nAllocLength | Longueur des données allouées dans XCHAR s (sans inclure la fin de null) |
nDataLength | Longueur des données actuellement utilisées dans XCHAR s (sans inclure la fin de la valeur Null) |
nRefs | Nombre de références actuel de l’objet. |
pStringMgr | Pointeur vers le gestionnaire de chaînes de cet objet de chaîne. |
Notes
Cette classe ne doit être utilisée que par les développeurs qui implémentent des gestionnaires de chaînes personnalisés. Pour plus d’informations sur les gestionnaires de chaînes personnalisés, consultez Gestion de la mémoire et CStringT
Cette classe encapsule différents types d’informations et de données associés à un objet de chaîne supérieur, tel que CStringT, CSimpleStringT ou les objets CFixedStringT. Chaque objet de chaîne supérieur contient un pointeur vers son objet associé CStringData
, ce qui permet à plusieurs objets de chaîne de pointer vers le même objet de données de chaîne. Cette relation est représentée par le nombre de références (nRefs
) de l’objet CStringData
.
Remarque
Dans certains cas, un type de chaîne (par exemple CFixedString
) ne partage pas d’objet de données de chaîne avec plusieurs objets de chaîne supérieurs. Pour plus d’informations sur ce problème, consultez Gestion de la mémoire et CStringT.
Ces données sont composées des suivantes :
Gestionnaire de mémoire (de type IAtlStringMgr) de la chaîne.
Longueur actuelle ( nDataLength) de la chaîne.
Longueur allouée ( nAllocLength) de la chaîne. Pour des raisons de performances, cela peut différer de la longueur de chaîne actuelle
Nombre de références actuel ( nRefs) de l’objet
CStringData
. Cette valeur est utilisée pour déterminer le nombre d’objets de chaîne qui partagent le mêmeCStringData
objet.Mémoire tampon de caractères réelle ( données) de la chaîne.
Remarque
La mémoire tampon de caractères réelle de l’objet de chaîne est allouée par le gestionnaire de chaînes et est ajoutée à l’objet
CStringData
.
Spécifications
En-tête : atlsimpstr.h
CStringData ::AddRef
Incrémente le nombre de références de l’objet chaîne.
void AddRef() throw();
Notes
Incrémente le nombre de références de l’objet chaîne.
Remarque
N’appelez pas cette méthode sur une chaîne avec un nombre de références négatif, car un nombre négatif indique que la mémoire tampon de chaîne est verrouillée.
CStringData ::d ata
Retourne un pointeur vers la mémoire tampon de caractères d’un objet de chaîne.
void* data() throw();
Valeur de retour
Pointeur vers la mémoire tampon de caractères de l’objet de chaîne.
Notes
Appelez cette fonction pour retourner la mémoire tampon de caractères actuelle de l’objet chaîne associé.
Remarque
Cette mémoire tampon n’est pas allouée par l’objet CStringData
, mais par le gestionnaire de chaînes si nécessaire. En cas d’allocation, la mémoire tampon est ajoutée à l’objet de données de chaîne.
CStringData ::IsLocked
Détermine si la mémoire tampon de caractères est verrouillée.
bool IsLocked() const throw();
Valeur de retour
Retourne TRUE si la mémoire tampon est verrouillée ; sinon FALSE.
Notes
Appelez cette fonction pour déterminer si la mémoire tampon de caractères d’un objet chaîne est actuellement verrouillée.
CStringData ::IsShared
Détermine si la mémoire tampon de caractères est partagée.
bool IsShared() const throw();
Valeur de retour
Retourne TRUE si la mémoire tampon est partagée ; sinon FALSE.
Notes
Appelez cette fonction pour déterminer si la mémoire tampon de caractères d’un objet de données de chaîne est actuellement partagée entre plusieurs objets de chaîne.
CStringData ::Lock
Verrouille la mémoire tampon de caractères de l’objet de chaîne associé.
void Lock() throw();
Notes
Appelez cette fonction pour verrouiller la mémoire tampon de caractères de l’objet de données de chaîne. Le verrouillage et le déverrouillage sont utilisés lorsque l’accès direct à la mémoire tampon de caractères est requis par le développeur. Un bon exemple de verrouillage est illustré par les méthodes LockBuffer et UnlockBuffer de CSimpleStringT
.
Remarque
Une mémoire tampon de caractères ne peut être verrouillée que si la mémoire tampon n’est pas partagée entre des objets de chaîne plus élevés.
CStringData ::nAllocLength
Longueur de la mémoire tampon de caractères allouée.
int nAllocLength;
Notes
Stocke la longueur de la mémoire tampon de données allouée dans XCHAR
s (sans inclure la fin de la valeur Null).
CStringData ::nDataLength
Longueur actuelle de l’objet de chaîne.
int nDataLength;
Notes
Stocke la longueur des données actuellement utilisées dans XCHAR
s (sans inclure la fin de la valeur Null).
CStringData ::nRefs
Nombre de références de l’objet de données de chaîne.
long nRefs;
Notes
Stocke le nombre de références de l’objet de données de chaîne. Ce nombre indique le nombre d’objets de chaîne supérieurs associés à l’objet de données de chaîne. Une valeur négative indique que l’objet de données de chaîne est actuellement verrouillé.
CStringData ::p StringMgr
Gestionnaire de mémoire de l’objet chaîne associé.
IAtlStringMgr* pStringMgr;
Notes
Stocke le gestionnaire de mémoire pour l’objet de chaîne associé. Pour plus d’informations sur les gestionnaires de mémoire et les chaînes, consultez Gestion de la mémoire et CStringT.
CStringData ::Release
Décrémente le nombre de références de l’objet de données de chaîne.
void Release() throw();
Notes
Appelez cette fonction pour décrémenter le nombre de références, en libérant la CStringData
structure si le nombre de références atteint zéro. Cette opération est généralement effectuée lorsqu’un objet de chaîne est supprimé et n’a donc plus besoin de référencer l’objet de données de chaîne.
Par exemple, le code suivant appelle CStringData::Release
l’objet de données de chaîne associé à 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
Déverrouille la mémoire tampon de caractères de l’objet de chaîne associé.
void Unlock() throw();
Notes
Appelez cette fonction pour déverrouiller la mémoire tampon de caractères de l’objet de données de chaîne. Une fois qu’une mémoire tampon est déverrouillée, elle est partageable et peut être comptabilisée.
Remarque
Chaque appel à doit Lock
être mis en correspondance par un appel correspondant à Unlock
.
Le verrouillage et le déverrouillage sont utilisés lorsque le développeur doit s’assurer que les données de chaîne ne sont pas partagées. Un bon exemple de verrouillage est illustré par les méthodes LockBuffer et UnlockBuffer de CSimpleStringT
.