Compartir a través de


Clase CStringData

Esta clase representa los datos de un objeto de cadena.

Sintaxis

struct CStringData

Miembros

Métodos

Nombre Descripción
AddRef Incrementa el recuento de referencias del objeto de datos de cadena.
data Recupera los datos de caracteres de un objeto de cadena.
IsLocked Determina si el búfer del objeto de cadena asociado está bloqueado.
IsShared Determina si el búfer del objeto de cadena asociado se comparte actualmente.
Bloquear Bloquea el búfer del objeto de cadena asociado.
Versión Libera el objeto de cadena especificado.
Unlock Desbloquea el búfer del objeto de cadena asociado.

Miembros de datos

Nombre Descripción
nAllocLength Longitud de los datos asignados en XCHARs (sin incluir la terminación null)
nDataLength Longitud de los datos que se usan actualmente en XCHARs (sin incluir la terminación null)
nRefs Recuento de referencias actual del objeto.
pStringMgr Puntero al administrador de cadenas de este objeto de cadena.

Comentarios

Solo los desarrolladores que implementan administradores de cadenas personalizados deben usar esta clase. Para obtener más información sobre los administradores de cadenas personalizados, consulte Administración de memoria con CStringT

Esta clase encapsula varios tipos de información y datos asociados a un objeto de cadena superior, como los objetos CStringT, CSimpleStringT o CFixedStringT. Cada objeto de cadena superior contiene un puntero a su objeto asociado CStringData, lo que permite que varios objetos de cadena apunten al mismo objeto de datos de cadena. Esta relación se representa mediante el recuento de referencias (nRefs) del objeto CStringData.

Nota:

En ciertos casos, un tipo de cadena (como CFixedString) no compartirá un objeto de datos de cadena con más de un objeto de cadena superior. Para más información sobre este tema, consulte Administración de memoria con CStringT.

Estos datos se componen de lo siguiente:

  • Administrador de memoria (de tipo IAtlStringMgr) de la cadena.

  • Longitud actual ( nDataLength) de la cadena.

  • Longitud asignada ( nAllocLength) de la cadena. Por motivos de rendimiento, esto puede diferir de la longitud de cadena actual

  • Recuento de referencias actual ( nRefs) del objeto CStringData. Este valor se usa para determinar cuántos objetos de cadena comparten el mismo objeto CStringData.

  • El búfer de caracteres real ( data) de la cadena.

    Nota:

    El administrador de cadenas asigna el búfer de caracteres real del objeto de cadena y se anexa al objeto CStringData.

Requisitos

Encabezado: atlsimpstr.h

CStringData::AddRef

Incrementa el recuento de referencias del objeto de cadena.

void AddRef() throw();

Comentarios

Incrementa el recuento de referencias del objeto de cadena.

Nota:

No llame a este método en una cadena con un recuento de referencias negativas, ya que un recuento negativo indica que el búfer de cadenas está bloqueado.

CStringData::data

Devuelve un puntero al búfer de caracteres de un objeto de cadena.

void* data() throw();

Valor devuelto

Puntero al búfer de caracteres del objeto de cadena.

Comentarios

Llame a esta función para devolver el búfer de caracteres actual del objeto de cadena asociado.

Nota:

El objeto CStringData no asigna este búfer, sino que lo hace el administrador de cadenas cuando sea necesario. Cuando se asigna, el búfer se anexa al objeto de datos de cadena.

CStringData::IsLocked

Determina si el búfer de caracteres está bloqueado.

bool IsLocked() const throw();

Valor devuelto

Devuelve TRUE si el búfer está bloqueado; en caso contrario, FALSE.

Comentarios

Llame a esta función para determinar si el búfer de caracteres de un objeto de cadena está bloqueado.

CStringData::IsShared

Determina si el búfer de caracteres se comparte.

bool IsShared() const throw();

Valor devuelto

Devuelve TRUE si se comparte el búfer; en caso contrario, FALSE.

Comentarios

Llame a esta función para determinar si el búfer de caracteres de un objeto de datos de cadena se comparte actualmente entre varios objetos de cadena.

CStringData::Lock

Bloquea el búfer de caracteres del objeto de cadena asociado.

void Lock() throw();

Comentarios

Llame a esta función para bloquear el búfer de caracteres del objeto de datos de cadena. El bloqueo y el desbloqueo se usan cuando el desarrollador requiere acceso directo al búfer de caracteres. Un buen ejemplo de bloqueo se muestra mediante los métodos LockBuffer y UnlockBuffer de CSimpleStringT.

Nota:

Un búfer de caracteres solo se puede bloquear si el búfer no se comparte entre objetos de cadena superiores.

CStringData::nAllocLength

Longitud del búfer de caracteres asignado.

int nAllocLength;

Comentarios

Almacena la longitud del búfer de datos asignado en XCHARs (sin incluir el valor null de terminación).

CStringData::nDataLength

Longitud actual del objeto de cadena.

int nDataLength;

Comentarios

Almacena la longitud de los datos que se usan actualmente en XCHARs (sin incluir la terminación null).

CStringData::nRefs

Recuento de referencias del objeto de datos de cadena.

long nRefs;

Comentarios

Almacena el recuento de referencias del objeto de datos de cadena. Este recuento indica el número de objetos de cadena superiores asociados al objeto de datos de cadena. Un valor negativo indica que el objeto de datos de cadena está bloqueado.

CStringData::pStringMgr

Administrador de memoria del objeto de cadena asociado.

IAtlStringMgr* pStringMgr;

Comentarios

Almacena el administrador de memoria para el objeto de cadena asociado. Para más información sobre los administradores de memoria y las cadenas, consulte Administración de memoria con CStringT.

CStringData::Release

Disminuye el recuento de referencias del objeto de datos de cadena.

void Release() throw();

Comentarios

Llame a esta función para disminuir el recuento de referencias, liberando la estructura CStringData si el recuento de referencias alcanza cero. Esto suele hacerse cuando se elimina un objeto de cadena y, por tanto, ya no necesita hacer referencia al objeto de datos de cadena.

Por ejemplo, el código siguiente llamaría a CStringData::Release para el objeto de datos de cadena asociado 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

Desbloquea el búfer de caracteres del objeto de cadena asociado.

void Unlock() throw();

Comentarios

Llame a esta función para desbloquear el búfer de caracteres del objeto de datos de cadena. Una vez que se desbloquea un búfer, se puede compartir y se puede contar como referencia.

Nota:

Cada llamada a Lock debe igualarse con una llamada correspondiente a Unlock.

El bloqueo y el desbloqueo se usan cuando el desarrollador debe asegurarse de que los datos de cadena no se compartan. Un buen ejemplo de bloqueo se muestra mediante los métodos LockBuffer y UnlockBuffer de CSimpleStringT.

Consulte también

Gráfico de jerarquías
Clases compartidas de ATL y MFC