Partilhar via


Classe CStringData

Observação

A biblioteca Microsoft Foundation Classes (MFC) e a Active Template Library (ATL) continuam a ser suportadas. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Esta classe representa os dados de um objeto string.

Sintaxe

struct CStringData

Membros

Methods

Nome Description
AddRef Incrementa a contagem de referência do objeto de dados da cadeia.
Dados Recupera os dados de carácter de um objeto string.
IsLocked Determina se o buffer do objeto string associado está bloqueado.
IsShared Determina se o buffer do objeto string associado está atualmente partilhado.
Bloqueio Bloqueia o buffer do objeto string associado.
Lançamento Liberta o objeto string especificado.
Desbloquear Desbloqueia o buffer do objeto string associado.

Membros de Dados

Nome Description
nAllocLength Comprimento dos dados alocados em XCHARs (excluindo a terminação nula)
nDataLength Comprimento dos dados atualmente usados em XCHARs (excluindo a terminação nula)
nÁrbitros A contagem atual de referências do objeto.
pStringMgr Um apontador para o gestor de strings deste objeto string.

Observações

Esta classe deve ser usada apenas por programadores que implementam gestores de strings personalizados. Para mais informações sobre gestores de strings personalizados, consulte Gestão de Memória e CStringT

Esta classe encapsula vários tipos de informação e dados associados a um objeto de string superior, como objetos CStringT, CSimpleStringT ou CFixedStringT . Cada objeto string superior contém um apontador para o seu objeto associado CStringData , permitindo que múltiplos objetos string apontem para o mesmo objeto de dados de string. Esta relação é representada pela contagem de referências (nRefs) do CStringData objeto.

Observação

Em certos casos, um tipo de cadeia (como CFixedString) não partilhará um objeto de dados de cadeia com mais do que um objeto de cadeia superior. Para mais informações sobre isto, consulte Gestão de Memória e CStringT.

Estes dados são compostos por:

  • O gestor de memória (do tipo IAtlStringMgr) da cadeia.

  • O comprimento atual ( nDataLength) da corda.

  • O comprimento atribuído ( nAllocLength) da corda. Por razões de desempenho, isto pode diferir do comprimento atual da corda

  • A contagem atual de referências ( nRefs) do CStringData objeto. Este valor é usado para determinar quantos objetos string partilham o mesmo CStringData objeto.

  • O buffer real de caracteres ( data) da cadeia.

    Observação

    O buffer de caracteres real do objeto string é alocado pelo gestor de string e é anexado ao CStringData objeto.

Requerimentos

Cabeçalho: atlsimpstr.h

CStringData::AddRef

Incrementa a contagem de referência do objeto string.

void AddRef() throw();

Observações

Incrementa a contagem de referência do objeto string.

Observação

Não chame este método numa cadeia com uma contagem de referência negativa, pois uma contagem negativa indica que o buffer da cadeia está bloqueado.

CStringData::d ata

Devolve um ponteiro para o buffer de caracteres de um objeto string.

void* data() throw();

Valor de retorno

Um apontador para o buffer de caracteres do objeto string.

Observações

Chame esta função para devolver o buffer de caracteres atual do objeto string associado.

Observação

Este buffer não é alocado pelo CStringData objeto, mas sim pelo gestor de strings quando necessário. Quando alocado, o buffer é anexado ao objeto de dados da cadeia.

CStringData::IsLocked

Determina se o buffer de personagem está bloqueado.

bool IsLocked() const throw();

Valor de retorno

Retorna TRUE se o buffer estiver bloqueado; caso contrário, FALSO.

Observações

Chame esta função para determinar se o buffer de caracteres de um objeto string está atualmente bloqueado.

CStringData::IsShared

Determina se o buffer de personagem é partilhado.

bool IsShared() const throw();

Valor de retorno

Retorna TRUE se o buffer for partilhado; caso contrário, FALSO.

Observações

Chame esta função para determinar se o buffer de caracteres de um objeto de dados string está atualmente partilhado entre múltiplos objetos string.

CStringData::Lock

Bloqueia o buffer de caracteres do objeto string associado.

void Lock() throw();

Observações

Chame esta função para bloquear o buffer de caracteres do objeto de dados da cadeia. O bloqueio e desbloqueio é usado quando o desenvolvedor exige acesso direto ao buffer de personagens. Um bom exemplo de bloqueio é demonstrado pelos métodos LockBuffer e UnlockBuffer de CSimpleStringT.

Observação

Um buffer de caracteres só pode ser bloqueado se o buffer não for partilhado entre objetos de string superiores.

CStringData::nAllocLength

Comprimento do buffer de carácter atribuído.

int nAllocLength;

Observações

Armazena o comprimento do buffer de dados alocado em XCHARs (excluindo a terminação nula).

CStringData::nDataLength

Comprimento atual do objeto da corda.

int nDataLength;

Observações

Armazena o comprimento dos dados atualmente usados em XCHARs (excluindo a terminação nula).

CStringData::nRefs

Contagem de referências do objeto de dados da cadeia.

long nRefs;

Observações

Armazena a contagem de referência do objeto de dados da cadeia. Esta contagem indica o número de objetos string mais altos associados ao objeto de dados de string. Um valor negativo indica que o objeto de dados string está atualmente bloqueado.

CStringData::p StringMgr

O gestor de memória do objeto string associado.

IAtlStringMgr* pStringMgr;

Observações

Armazena o gestor de memória para o objeto string associado. Para mais informações sobre gestores de memória e strings, consulte Gestão de Memória e CStringT.

CStringData::Release

Diminui a contagem de referência do objeto de dados da cadeia.

void Release() throw();

Observações

Chame esta função para decrementar a contagem de referência, libertando a CStringData estrutura se a contagem de referência atingir zero. Isto é comum quando um objeto string é eliminado e, por isso, já não precisa de referenciar o objeto de dados string.

Por exemplo, o seguinte código chamaria CStringData::Release o objeto de dados string 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::Desbloquear

Desbloqueia o buffer de caracteres do objeto string associado.

void Unlock() throw();

Observações

Chame esta função para desbloquear o buffer de caracteres do objeto de dados da cadeia. Uma vez desbloqueado um buffer, é partilhável e pode ser contado por referência.

Observação

Cada chamada a Lock deve ser correspondida por uma chamada correspondente a Unlock.

O bloqueio e desbloqueio é usado quando o programador tem de garantir que os dados da cadeia não são partilhados. Um bom exemplo de bloqueio é demonstrado pelos métodos LockBuffer e UnlockBuffer de CSimpleStringT.

Consulte também

Gráfico de Hierarquia
Classes compartilhadas ATL/MFC