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 XCHAR s (sin incluir la terminación null) |
nDataLength | Longitud de los datos que se usan actualmente en XCHAR s (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 objetoCStringData
.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 XCHAR
s (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 XCHAR
s (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
.