CStringData Class
Essa classe representa os dados de um objeto de cadeia de caracteres.
Sintaxe
struct CStringData
Membros
Métodos
Nome | Descrição |
---|---|
RefAdição | Incrementa a contagem de referência do objeto de dados de cadeia de caracteres. |
data | Recupera os dados de caractere de um objeto de cadeia de caracteres. |
IsLocked | Determina se o buffer do objeto de cadeia de caracteres associado está bloqueado. |
É compartilhado | Determina se o buffer do objeto de cadeia de caracteres associado é compartilhado no momento. |
Lock | Bloqueia o buffer do objeto de cadeia de caracteres associado. |
Versão | Libera o objeto de cadeia de caracteres especificado. |
Unlock | Desbloqueia o buffer do objeto de cadeia de caracteres associado. |
Membros de dados
Nome | Descrição |
---|---|
nAllocLength | Comprimento dos dados alocados em XCHAR s (sem incluir o encerramento nulo) |
nDataLength | Comprimento dos dados atualmente usados em XCHAR s (sem incluir o encerramento nulo) |
nRefs | A contagem de referência atual do objeto. |
pStringMgr | Um ponteiro para o gerenciador de cadeias de caracteres desse objeto de cadeia de caracteres. |
Comentários
Essa classe só deve ser usada por desenvolvedores que implementam gerenciadores de cadeias de caracteres personalizadas. Para obter mais informações sobre gerenciadores de cadeias de caracteres personalizadas, consulte Gerenciamento de Memória e CStringT
Essa classe encapsula vários tipos de informações e dados associados a um objeto de cadeia de caracteres mais alto, como objetos CStringT, CSimpleStringT ou CFixedStringT. Cada objeto de cadeia de caracteres superior contém um ponteiro para seu objeto CStringData
associado, permitindo que vários objetos de cadeia de caracteres apontem para o mesmo objeto de dados de cadeia de caracteres. Essa relação é representada pela contagem de referência (nRefs
) do objeto CStringData
.
Observação
Em determinados casos, um tipo de cadeia de caracteres (como CFixedString
) não compartilhará um objeto de dados de cadeia de caracteres com mais de um objeto de cadeia de caracteres superior. Para saber mais sobre isso, confira Gerenciamento de memória e CStringT.
Esses dados são compostos de:
O gerenciador de memória (do tipo IAtlStringMgr) da cadeia de caracteres.
O comprimento atual (nDataLength) da cadeia de caracteres.
O comprimento alocado (nAllocLength) da cadeia de caracteres. Por motivos de desempenho, ele pode ser diferente do comprimento da cadeia de caracteres atual
A contagem de referência atual (nRefs) do objeto
CStringData
. Esse valor é usado para determinar quantos objetos de cadeia de caracteres estão compartilhando o mesmo objetoCStringData
.O buffer de caracteres real (dados) da cadeia de caracteres.
Observação
O buffer de caractere real do objeto de cadeia de caracteres é alocado pelo gerenciador de cadeia de caracteres e é acrescentado ao objeto
CStringData
.
Requisitos
Cabeçalho: atlsimpstr.h
CStringData::AddRef
Incrementa a contagem de referência do objeto de cadeia de caracteres.
void AddRef() throw();
Comentários
Incrementa a contagem de referência do objeto de cadeia de caracteres.
Observação
Não chame esse método em uma cadeia de caracteres com uma contagem de referência negativa, pois uma contagem negativa indica que o buffer de cadeia de caracteres está bloqueado.
CStringData::data
Retorna um ponteiro para o buffer de caracteres de um objeto de cadeia de caracteres.
void* data() throw();
Valor de retorno
Um ponteiro para o buffer de caracteres do objeto de cadeia de caracteres.
Comentários
Chame essa função para retornar o buffer de caracteres atual do objeto de cadeia de caracteres associado.
Observação
Esse buffer não é alocado pelo objeto CStringData
, mas pelo gerenciador de cadeias de caracteres quando necessário. Quando alocado, o buffer é acrescentado ao objeto de dados de cadeia de caracteres.
CStringData::IsLocked
Determina se o buffer de caracteres está bloqueado.
bool IsLocked() const throw();
Valor de retorno
Retorna TRUE se o buffer estiver bloqueado; caso contrário, FALSE.
Comentários
Chame essa função para determinar se o buffer de caracteres de um objeto de cadeia de caracteres está bloqueado no momento.
CStringData::IsShared
Determina se o buffer de caracteres é compartilhado.
bool IsShared() const throw();
Valor de retorno
Retorna TRUE se o buffer for compartilhado; caso contrário, FALSE.
Comentários
Chame essa função para determinar se o buffer de caracteres de um objeto de dados de cadeia de caracteres é compartilhado atualmente entre vários objetos de cadeia de caracteres.
CStringData::Lock
Bloqueia o buffer de caracteres do objeto de cadeia de caracteres associado.
void Lock() throw();
Comentários
Chame essa função para bloquear o buffer de caracteres do objeto de dados de cadeia de caracteres. O bloqueio e o desbloqueio são usados quando o acesso direto ao buffer de caracteres é exigido pelo desenvolvedor. Um bom exemplo de bloqueio é demonstrado pelos métodos LockBuffer e UnlockBuffer de CSimpleStringT
.
Observação
Um buffer de caracteres só poderá ser bloqueado se o buffer não for compartilhado entre objetos de cadeia de caracteres superiores.
CStringData::nAllocLength
Comprimento do buffer de caracteres alocado.
int nAllocLength;
Comentários
Armazena o comprimento do buffer de dados alocado em XCHAR
s (sem incluir o encerramento nulo).
CStringData::nDataLength
Comprimento atual do objeto de cadeia de caracteres.
int nDataLength;
Comentários
Armazena o comprimento dos dados atualmente usados em XCHAR
s (sem incluir o encerramento nulo).
CStringData::nRefs
Contagem de referência do objeto de dados de cadeia de caracteres.
long nRefs;
Comentários
Armazena a contagem de referência do objeto de dados de cadeia de caracteres. Essa contagem indica o número de objetos de cadeia de caracteres mais altos associados ao objeto de dados de cadeia de caracteres. Um valor negativo indica que o objeto de dados de cadeia de caracteres está bloqueado no momento.
CStringData::pStringMgr
O gerenciador de memória do objeto de cadeia de caracteres associado.
IAtlStringMgr* pStringMgr;
Comentários
Armazena o gerenciador de memória do objeto de cadeia de caracteres associado. Para obter mais informações sobre gerenciadores de memória e cadeia de caracteres, confira Gerenciamento de memória e CStringT.
CStringData::Release
Decrementa a contagem de referência do objeto de dados de cadeia de caracteres.
void Release() throw();
Comentários
Chame essa função para decrementar a contagem de referência, liberando a estrutura CStringData
se a contagem de referência atingir zero. Isso geralmente é feito quando um objeto de cadeia de caracteres é excluído e, portanto, não precisa mais referenciar o objeto de dados de cadeia de caracteres.
Por exemplo, o código a seguir exigiria CStringData::Release
para o objeto de dados de cadeia de caracteres associado 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
Desbloqueia o buffer de caracteres do objeto de cadeia de caracteres associado.
void Unlock() throw();
Comentários
Chame essa função para desbloquear o buffer de caracteres do objeto de dados de cadeia de caracteres. Depois que um buffer é desbloqueado, ele é compartilhável e pode ser contado por referência.
Observação
Cada chamada para Lock
precisa ser correspondida por uma chamada correspondente para Unlock
.
O bloqueio e o desbloqueio são usados quando o desenvolvedor precisa garantir que os dados da cadeia de caracteres não sejam compartilhados. Um bom exemplo de bloqueio é demonstrado pelos métodos LockBuffer e UnlockBuffer de CSimpleStringT
.