Partager via


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 XCHARs (sans inclure la fin de null)
nDataLength Longueur des données actuellement utilisées dans XCHARs (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ême CStringData 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 XCHARs (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 XCHARs (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.

Voir aussi

Graphique hiérarchique
Classes partagées ATL/MFC