Partilhar via


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 XCHARs (sem incluir o encerramento nulo)
nDataLength Comprimento dos dados atualmente usados em XCHARs (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 objeto CStringData.

  • 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 XCHARs (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 XCHARs (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.

Confira também

Gráfico da hierarquia
Classes compartilhadas ATL/MFC