Partilhar via


Classe CSimpleStringT

Essa classe representa um objeto CSimpleStringT.

Sintaxe

template <typename BaseType>
class CSimpleStringT

Parâmetros

BaseType
O tipo de caractere da classe de cadeia de caracteres. Um dos seguintes pode ser feito:

  • char (para cadeia de caracteres ANSI).

  • wchar_t (para cadeia de caracteres Unicode).

  • TCHAR (para cadeia de caracteres Unicode e ANSI).

Membros

Typedefs públicos

Nome Descrição
CSimpleStringT::PCXSTR Um ponteiro para uma cadeia de caracteres constante.
CSimpleStringT::PXSTR Um ponteiro para uma cadeia de caracteres.

Construtores públicos

Nome Descrição
CSimpleStringT::CSimpleStringT Constrói objetos CSimpleStringT de várias maneiras.
CSimpleStringT::~CSimpleStringT Destruidor.

Métodos públicos

Nome Descrição
CSimpleStringT::Append Acrescenta um objeto CSimpleStringT a um objeto CSimpleStringT existente.
CSimpleStringT::AppendChar Acrescenta um caractere a um objeto CSimpleStringT existente.
CSimpleStringT::CopyChars Copia um caractere ou caracteres em outra cadeia de caracteres.
CSimpleStringT::CopyCharsOverlapped Copia um caractere ou caracteres em outra cadeia de caracteres na qual os buffers se sobrepõem.
CSimpleStringT::Empty Força uma cadeia de caracteres a ter um comprimento de zero.
CSimpleStringT::FreeExtra Libera qualquer memória extra alocada anteriormente pelo objeto de cadeia de caracteres.
CSimpleStringT::GetAllocLength Recupera o comprimento alocado de um objeto CSimpleStringT.
CSimpleStringT::GetAt Retorna o caractere em uma determinada posição.
CSimpleStringT::GetBuffer Retorna um ponteiro para os caracteres em um CSimpleStringT.
CSimpleStringT::GetBufferSetLength Retorna um ponteiro para os caracteres em um CSimpleStringT, truncando no comprimento especificado.
CSimpleStringT::GetLength Retorna o número de caracteres em um objeto CSimpleStringT.
CSimpleStringT::GetManager Recupera o gerenciador de memória do objeto CSimpleStringT.
CSimpleStringT::GetString Recupera a cadeia de caracteres
CSimpleStringT::IsEmpty Testa se um objeto CSimpleStringT não contém caracteres.
CSimpleStringT::LockBuffer Desabilita a contagem de referências e protege a cadeia de caracteres no buffer.
CSimpleStringT::Preallocate Aloca uma quantidade específica de memória para o buffer de caracteres.
CSimpleStringT::ReleaseBuffer Libera o controle do buffer retornado por GetBuffer.
CSimpleStringT::ReleaseBufferSetLength Libera o controle do buffer retornado por GetBuffer.
CSimpleStringT::SetAt Define um caractere em uma determinada posição.
CSimpleStringT::SetManager Define o gerenciador de memória de um objeto CSimpleStringT.
CSimpleStringT::SetString Define uma cadeia de caracteres de um objeto CSimpleStringT.
CSimpleStringT::StringLength Retorna o número de caracteres na cadeia de caracteres especificada.
CSimpleStringT::Truncate Trunca a cadeia de caracteres no comprimento especificado.
CSimpleStringT::UnlockBuffer Habilita a contagem de referências e libera a cadeia de caracteres no buffer.

Operadores públicos

Nome Descrição
CSimpleStringT::operator PCXSTR Acessa diretamente caracteres armazenados em um objeto CSimpleStringT como uma cadeia de caracteres no estilo C.
CSimpleStringT::operator[] Retorna o caractere em uma determinada posição – substituição do operador para GetAt.
CSimpleStringT::operator += Concatena uma nova cadeia de caracteres até o final de uma cadeia de caracteres existente.
CSimpleStringT::operator = Atribui um novo valor a um objeto CSimpleStringT.

Comentários

CSimpleStringT é a classe base para as várias classes de cadeia de caracteres compatíveis com o Visual C++. Ele fornece suporte mínimo para o gerenciamento de memória do objeto de cadeia de caracteres e manipulação básica do buffer. Para obter objetos de cadeia de caracteres mais avançados, confira CStringT Class.

Requisitos

Cabeçalhoatlsimpstr.h:

CSimpleStringT::Append

Acrescenta um objeto CSimpleStringT a um objeto CSimpleStringT existente.

Sintaxe

void Append(const CSimpleStringT& strSrc);
void Append(PCXSTR pszSrc, int nLength);
void Append(PCXSTR pszSrc);

Parâmetros

strSrc
O objeto CSimpleStringT a ser acrescentado.

pszSrc
Um ponteiro para uma cadeia de caracteres que contém os caracteres de destino a serem acrescentados.

nLength
O número de caracteres a serem acrescentados.

Comentários

Chame esse método para acrescentar um objeto CSimpleStringT existente a outro objeto CSimpleStringT.

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::Append.

CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();
CSimpleString str1(pMgr), str2(pMgr);
str1.SetString(_T("Soccer is"));
str2.SetString(_T(" an elegant game"));
str1.Append(str2);
ASSERT(_tcscmp(str1, _T("Soccer is an elegant game")) == 0);

CSimpleStringT::AppendChar

Acrescenta um caractere a um objeto CSimpleStringT existente.

Sintaxe

void AppendChar(XCHAR ch);

Parâmetros

ch
O caractere a ser acrescentado

Comentários

Chame essa função para acrescentar o caractere especificado ao final de um objeto CSimpleStringT existente.

CSimpleStringT::CopyChars

Copia um caractere ou caracteres em um objeto CSimpleStringT.

Sintaxe

static void CopyChars(
    XCHAR* pchDest,
    const XCHAR* pchSrc,
    int nChars) throw();
static void CopyChars(
    XCHAR* pchDest,
    size_t nDestLen,
    const XCHAR* pchSrc,
    int nChars) throw();

Parâmetros

pchDest
Um ponteiro para uma cadeia de caracteres.

nDestLen
Tamanho do buffer de pchDest

pchSrc
Um ponteiro para uma cadeia de caracteres que contém os caracteres a serem copiados.

nChars
O número de caracteres pchSrc a serem copiados.

Comentários

Chame esse método para copiar caracteres da cadeia de caracteres pchSrc para pchDest.

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::CopyChars.

CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();
CSimpleString str(_T("xxxxxxxxxxxxxxxxxxx"), 20, pMgr);
const TCHAR* pszSrc = _T("Hello world!");
_tprintf_s(_T("%s\n"), str);
str.CopyChars(str.GetBuffer(), 20, pszSrc, 12);
_tprintf_s(_T("%s\n"), str);

A saída desse exemplo é a seguinte:

xxxxxxxxxxxxxxxxxxx
Hello world!xxxxxxx

CSimpleStringT::CopyCharsOverlapped

Copia um caractere ou caracteres em um objeto CSimpleStringT.

Sintaxe

static void CopyCharsOverlapped(
    XCHAR* pchDest,
    const XCHAR* pchSrc,
    int nChars) throw();

Parâmetros

pchDest
Um ponteiro para uma cadeia de caracteres.

pchSrc
Um ponteiro para uma cadeia de caracteres que contém os caracteres a serem copiados.

nChars
O número de caracteres pchSrc a serem copiados.

Comentários

Chame esse método para copiar caracteres da cadeia de caracteres pchSrc para pchDest. Diferentemente de CopyChars, CopyCharsOverlapped fornece um método seguro para copiar de buffers de caracteres que podem ser sobrepostos.

Exemplo

Consulte o exemplo de CSimpleStringT::CopyChars, ou o código-fonte para CSimpleStringT::SetString (localizado em atlsimpstr.h).

CSimpleStringT::CSimpleStringT

Constrói um objeto CSimpleStringT.

Sintaxe

CSimpleStringT(const XCHAR* pchSrc, int nLength, IAtlStringMgr* pStringMgr);
CSimpleStringT(PCXSTR pszSrc, IAtlStringMgr* pStringMgr);
CSimpleStringT(const CSimpleStringT& strSrc);
explicit CSimpleStringT(IAtlStringMgr* pStringMgr) throw();

Parâmetros

strSrc
Um objeto CSimpleStringT existente a ser copiado nesse objeto CSimpleStringT.

pchSrc
Um ponteiro para uma matriz de caracteres de tamanho nLength, que não termina em nulo.

pszSrc
Uma cadeia de caracteres terminada em nulo a ser copiada para nesse objeto CSimpleStringT.

nLength
Uma contagem do número de caracteres em pch.

pStringMgr
Um ponteiro para o gerenciador de memória do objeto CSimpleStringT. Para obter mais informações sobre IAtlStringMgr e gerenciamento de memória de CSimpleStringT, confira Gerenciamento de memória e CStringT.

Comentários

Construa um novo objeto CSimpleStringT. Como os construtores copiam os dados de entrada em um novo armazenamento alocado, podem ocorrer exceções de memória.

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::CSimpleStringT ao usar o typedefCSimpleString da ATL. CSimpleString é uma especialização comumente usada do modelo de classe CSimpleStringT.

CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();

CSimpleString s1(pMgr);
// Empty string
CSimpleString s2(_T("cat"), pMgr);
// From a C string literal

CSimpleString s3(s2);
// Copy constructor
CSimpleString s4(s2 + _T(" ") + s3);

// From a string expression
CSimpleString s5(_T("xxxxxx"), 6, pMgr);
// s5 = "xxxxxx"

CSimpleStringT::Empty

Torna esse objeto CSimpleStringT uma cadeia de caracteres vazia e libera a memória conforme apropriado.

Sintaxe

void Empty() throw();

Comentários

Para obter mais informações, confira Cadeias de caracteres: limpeza de exceção CString.

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::Empty.

CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();

CSimpleString s(pMgr);
ASSERT(s.IsEmpty());

CSimpleStringT::FreeExtra

Libera qualquer memória extra alocada anteriormente pela cadeia de caracteres que não é mais necessária.

Sintaxe

void FreeExtra();

Comentários

Isso deve reduzir a sobrecarga de memória consumida pelo objeto da cadeia de caracteres. O método realoca o buffer para o comprimento exato retornado por GetLength.

Exemplo

CAtlString basestr;
IAtlStringMgr* pMgr;

pMgr= basestr.GetManager();
ASSERT(pMgr != NULL);

// Create a CSimpleString with 28 characters
CSimpleString str(_T("Many sports are fun to play."), 28, pMgr);
_tprintf_s(_T("Alloc length is %d, String length is %d\n"),
   str.GetAllocLength(), str.GetLength());

// Assigning a smaller string won't cause CSimpleString to free its
// memory, because it assumes the string will grow again anyway.
str = _T("Soccer is best!");
_tprintf_s(_T("Alloc length is %d, String length is %d\n"),
   str.GetAllocLength(), str.GetLength());

// This call forces CSimpleString to release the extra
// memory it doesn't need.
str.FreeExtra();
_tprintf_s(_T("Alloc length is %d, String length is %d\n"),
   str.GetAllocLength(), str.GetLength());

A saída desse exemplo é a seguinte:

Alloc length is 1031, String length is 1024
Alloc length is 1031, String length is 15
Alloc length is 15, String length is 15

CSimpleStringT::GetAllocLength

Recupera o comprimento alocado de um objeto CSimpleStringT.

Sintaxe

int GetAllocLength() const throw();

Valor retornado

O número de caracteres alocados para esse objeto.

Comentários

Chame esse método para determinar o número de caracteres alocados para esse objeto CSimpleStringT. Confira FreeExtra para um exemplo de como chamar essa função.

CSimpleStringT::GetAt

Retorna um caractere de um objeto CSimpleStringT.

Sintaxe

XCHAR GetAt(int iChar) const;

Parâmetros

iChar
Índice baseado em zero do caractere no objeto CSimpleStringT. O parâmetro iChar deve ser maior ou igual a 0 e menor que o valor retornado por GetLength. Caso contrário, GetAt gerará uma exceção.

Valor de retorno

Um XCHAR que contém o caractere na posição especificada na cadeia de caracteres.

Comentários

Chame esse método para retornar um caractere especificado por iChar. O operador subscrito sobrecarregado ([]) é um alias conveniente para GetAt. O terminador nulo é endereçável sem gerar uma exceção usando GetAt. No entanto, ele não é contado por GetLength, e o valor retornado é 0.

Exemplo

O exemplo a seguir demonstra como usar CSimpleStringT::GetAt.

CSimpleString s(_T("abcdef"), pMgr);
ASSERT(s.GetAt(2) == _T('c'));

CSimpleStringT::GetBuffer

Retorna um ponteiro para o buffer de caracteres interno do objeto CSimpleStringT.

Sintaxe

PXSTR GetBuffer(int nMinBufferLength);
PXSTR GetBuffer();

Parâmetros

nMinBufferLength
O número mínimo de caracteres que o buffer de caracteres pode conter. Esse valor não inclui espaço para um terminador nulo.

Se nMinBufferLength for maior que o comprimento do buffer atual, GetBuffer destruirá o buffer atual, e ele será substituído por um buffer do tamanho solicitado e a contagem de referência de objeto será redefinida como zero. Se já tiver chamado LockBuffer nesse buffer, você perderá o bloqueio do buffer.

Valor de retorno

Um ponteiro PXSTR para o buffer de caracteres do objeto (com terminação nula).

Comentários

Chame esse método para retornar o conteúdo do buffer do objeto CSimpleStringT. O PXSTR retornado não é uma constante e, portanto, permite modificação direta do conteúdo CSimpleStringT.

Se você usar o ponteiro retornado por GetBuffer para alterar o conteúdo da cadeia de caracteres, deverá chamar ReleaseBuffer para atualizar o estado interno de antes de CSimpleStringT usar quaisquer outros CSimpleStringT métodos.

O endereço retornado por GetBuffer pode não ser válido após a chamada para ReleaseBuffer porque operações CSimpleStringT adicionais podem fazer com que o buffer CSimpleStringT seja realocado. O buffer não será realocado se você não alterar o comprimento de CSimpleStringT.

A memória do buffer é liberada automaticamente quando o objeto CSimpleStringT é destruído.

Se você controlar o comprimento da cadeia de caracteres, não acrescente o caractere nulo de terminação. No entanto, você deve especificar o comprimento final da cadeia de caracteres ao liberar o buffer com ReleaseBuffer. Se você acrescentar um caractere nulo de terminação, deverá passar -1 (o padrão) para o comprimento. ReleaseBuffer determina o comprimento do buffer.

Se não houver memória suficiente para atender à solicitação GetBuffer, esse método gerará um CMemoryException*.

Exemplo

CSimpleString s(_T("abcd"), pMgr);
LPTSTR pBuffer = s.GetBuffer(10);
int sizeOfBuffer = s.GetAllocLength();

// Directly access CSimpleString buffer
_tcscpy_s(pBuffer, sizeOfBuffer, _T("Hello"));
ASSERT(_tcscmp(s, _T("Hello")) == 0);
s.ReleaseBuffer();

CSimpleStringT::GetBufferSetLength

Retorna um ponteiro para o buffer de caracteres interno para o objeto CSimpleStringT, truncando ou aumentando seu comprimento, se necessário, para corresponder exatamente ao comprimento especificado em nLength.

Sintaxe

PXSTR GetBufferSetLength(int nLength);

Parâmetros

nLength
O tamanho exato do buffer de caracteres CSimpleStringT em caracteres.

Valor de retorno

Um ponteiro PXSTR para o buffer de caracteres do objeto (com terminação nula).

Comentários

Chame esse método para recuperar um comprimento especificado do buffer interno do objeto CSimpleStringT. O ponteiro PXSTR retornado não é const e, portanto, permite modificação direta do conteúdo CSimpleStringT.

Se você usar o ponteiro retornado por GetBufferSetLength para alterar o conteúdo da cadeia de caracteres, chame ReleaseBuffer para atualizar o estado interno de CSimpleStringT antes de usar outros métodos CSimpleStringT.

O endereço retornado por GetBufferSetLength pode não ser válido após a chamada para ReleaseBuffer porque operações CSimpleStringT adicionais podem fazer com que o buffer CSimpleStringT seja realocado. O buffer não será reatribuído se você não alterar o comprimento de CSimpleStringT.

A memória do buffer é liberada automaticamente quando o objeto CSimpleStringT é destruído.

Se você controlar o comprimento da cadeia de caracteres, não acrescente o caractere nulo de terminação. Você deve especificar o comprimento final da cadeia de caracteres ao liberar o buffer usando ReleaseBuffer. Se você acrescentar um caractere nulo de terminação ao chamar ReleaseBuffer, passe -1 (o padrão) para o comprimento para ReleaseBuffer, e ReleaseBuffer executará um strlen no buffer para determinar seu comprimento.

Para obter mais informações sobre a contagem de referências, confira os seguintes artigos:

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::GetBufferSetLength.

CSimpleString str(pMgr);
LPTSTR pstr = str.GetBufferSetLength(3);
pstr[0] = _T('C');
pstr[1] = _T('u');
pstr[2] = _T('p');
str.ReleaseBuffer();

str += _T(" soccer is best!");
ASSERT(_tcscmp(str, _T("Cup soccer is best!")) == 0);

CSimpleStringT::GetLength

Retorna o número de caracteres no objeto CSimpleStringT.

Sintaxe

int GetLength() const throw();

Valor retornado

Uma contagem dos caracteres na cadeia de caracteres.

Comentários

Chame esse método para retornar o número de caracteres no objeto. A contagem não inclui um terminador nulo.

Para MBCS (conjuntos de caracteres multibyte), GetLength refere-se a cada caractere de 8 bits. Ou seja, um byte à direita e um byte à esquerda em um caractere multibyte são contados como dois bytes. Confira FreeExtra para um exemplo de como chamar essa função.

CSimpleStringT::GetManager

Recupera o gerenciador de memória do objeto CSimpleStringT.

Sintaxe

IAtlStringMgr* GetManager() const throw();

Valor retornado

Um ponteiro para o gerenciador de memória do objeto CSimpleStringT.

Comentários

Chame esse método para recuperar o gerenciador de memória usado pelo objeto CSimpleStringT. Para obter mais informações sobre gerenciadores de memória e objetos de cadeia de caracteres, confira Gerenciamento de memória e CStringT.

CSimpleStringT::GetString

Recupera a cadeia de caracteres.

Sintaxe

PCXSTR GetString() const throw();

Valor retornado

Um ponteiro para uma cadeia de caracteres terminada em nulo.

Comentários

Chame esse método para recuperar a cadeia de caracteres associada ao objeto CSimpleStringT.

Observação

O ponteiro PCXSTR retornado é const e não permite modificação direta do conteúdo CSimpleStringT.

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::GetString.

CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();   
CSimpleString str(pMgr);
str += _T("Cup soccer is best!");
_tprintf_s(_T("%s"), str.GetString());

A saída desse exemplo é a seguinte:

Cup soccer is best!

CSimpleStringT::IsEmpty

Testa um objeto CSimpleStringT quanto a condição vazia.

Sintaxe

bool IsEmpty() const throw();

Valor retornado

Retorna TRUE se o objeto CSimpleStringT tiver comprimento 0. Caso contrário, FALSE.

Comentários

Chame esse método para determinar se o objeto contém uma cadeia de caracteres vazia.

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::IsEmpty.

CSimpleString s(pMgr);
ASSERT(s.IsEmpty());

CSimpleStringT::LockBuffer

Desabilita a contagem de referências e protege a cadeia de caracteres no buffer.

Sintaxe

PXSTR LockBuffer();

Valor retornado

Um ponteiro para um objeto CSimpleStringT ou uma cadeia de caracteres terminada em nulo.

Comentários

Chame esse método para bloquear o buffer do objeto CSimpleStringT. Ao chamar LockBuffer, você cria uma cópia da cadeia de caracteres, com um -1 para a contagem de referência. Quando o valor da contagem de referência é -1, a cadeia de caracteres no buffer é considerada em um estado "bloqueado". Enquanto estiver em um estado bloqueado, a cadeia de caracteres é protegida de duas maneiras:

  • Nenhuma outra cadeia de caracteres pode obter uma referência aos dados na cadeia de caracteres bloqueada, mesmo que essa cadeia de caracteres seja atribuída à cadeia de caracteres bloqueada.

  • A cadeia de caracteres bloqueada nunca fará referência a outra cadeia de caracteres, mesmo que essa outra cadeia de caracteres seja copiada na cadeia de caracteres bloqueada.

Ao bloquear a cadeia de caracteres no buffer, você garante que a retenção exclusiva da cadeia de caracteres no buffer permanecerá intacta.

Depois de terminar com LockBuffer, chame UnlockBuffer para redefinir a contagem de referências para 1.

Observação

Se você chamar GetBuffer em um buffer bloqueado e definir o parâmetro GetBuffernMinBufferLength como maior que o comprimento do buffer atual, perderá o bloqueio de buffer. Essa chamada para GetBuffer destrói o buffer atual, faz a substituição dele por um buffer do tamanho solicitado e redefine a contagem de referências como zero.

Para obter mais informações sobre a contagem de referências, confira os seguintes artigos:

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::LockBuffer.

CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();

CSimpleString str(_T("Hello"), pMgr);
TCHAR ch;

str.LockBuffer();
ch = str.GetAt(2);
_tprintf_s(_T("%c"), ch);
str.UnlockBuffer();

A saída desse exemplo é a seguinte:

l

CSimpleStringT::operator[]

Chame essa função para acessar um único caractere da matriz de caracteres.

Sintaxe

XCHAR operator[](int iChar) const;

Parâmetros

iChar
Índice baseado em zero de um caractere na cadeia de caracteres.

Comentários

O operador subscrito sobrecarregado ([]) retorna um único caractere especificado pelo índice baseado em zero em iChar. Esse operador é um substituto conveniente para a função de membro GetAt.

Observação

Você pode usar o operador subscrito ([]) para obter o valor de um caractere em um CSimpleStringT, mas não pode usá-lo para alterar o valor de um caractere em um CSimpleStringT.

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::operator [].

CSimpleString s(_T("abc"), pMgr);
ASSERT(s[1] == _T('b'));

CSimpleStringT::operator []

Chame essa função para acessar um único caractere da matriz de caracteres.

Sintaxe

XCHAR operator[](int iChar) const;

Parâmetros

iChar
Índice baseado em zero de um caractere na cadeia de caracteres.

Comentários

O operador subscrito sobrecarregado ([]) retorna um único caractere especificado pelo índice baseado em zero em iChar. Esse operador é um substituto conveniente para a função de membro GetAt.

Observação

Você pode usar o operador subscrito ([]) para obter o valor de um caractere em um CSimpleStringT, mas não pode usá-lo para alterar o valor de um caractere em um CSimpleStringT.

CSimpleStringT::operator +=

Une uma nova cadeia de caracteres ou caractere ao final de uma cadeia de caracteres existente.

Sintaxe

CSimpleStringT& operator +=(PCXSTR pszSrc);
CSimpleStringT& operator +=(const CSimpleStringT& strSrc);
template<int t_nSize>
CSimpleStringT& operator+=(const CStaticString< XCHAR, t_nSize >& strSrc);
CSimpleStringT& operator +=(char ch);
CSimpleStringT& operator +=(unsigned char ch);
CSimpleStringT& operator +=(wchar_t ch);

Parâmetros

pszSrc
Um ponteiro para uma cadeia de caracteres terminada em nulo.

strSrc
Um ponteiro para um objeto CSimpleStringT existente.

ch
O caractere a ser acrescentado.

Comentários

O operador aceita outro objeto CSimpleStringT ou um caractere. Observe que exceções de memória poderão ocorrer sempre que você usar esse operador de concatenação porque o novo armazenamento poderá ser alocado para caracteres adicionados a esse objeto CSimpleStringT.

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::operator +=.

CSimpleString str(_T("abc"), pMgr);
ASSERT(_tcscmp((str += _T("def")), _T("abcdef")) == 0);

CSimpleStringT::operator =

Atribui um novo valor a um objeto CSimpleStringT.

Sintaxe

CSimpleStringT& operator =(PCXSTR pszSrc);
CSimpleStringT& operator =(const CSimpleStringT& strSrc);

Parâmetros

pszSrc
Um ponteiro para uma cadeia de caracteres terminada em nulo.

strSrc
Um ponteiro para um objeto CSimpleStringT existente.

Comentários

Se a cadeia de caracteres de destino (o lado esquerdo) já for grande o suficiente para armazenar os novos dados, nenhuma nova alocação de memória será executada. Observe que exceções de memória poderão ocorrer sempre que você usar o operador de atribuição porque o novo armazenamento é, geralmente, alocado para reter o objeto CSimpleStringT resultante.

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::operator =.

CSimpleString s1(pMgr), s2(pMgr);
// Empty CSimpleStringT objects

s1 = _T("cat");
// s1 = "cat"
ASSERT(_tcscmp(s1, _T("cat")) == 0);

s2 = s1;               // s1 and s2 each = "cat"
ASSERT(_tcscmp(s2, _T("cat")) == 0);

s1 = _T("the ") + s1;
// Or expressions
ASSERT(_tcscmp(s1, _T("the cat")) == 0);

s1 = _T("x");
// Or just individual characters
ASSERT(_tcscmp(s1, _T("x")) == 0);

CSimpleStringT::operator PCXSTR

Acessa diretamente caracteres armazenados em um objeto CSimpleStringT como uma cadeia de caracteres no estilo C.

Sintaxe

operator PCXSTR() const throw();

Valor retornado

Um ponteiro de caractere para os dados da cadeia de caracteres.

Comentários

Nenhum caractere é copiado. Apenas um ponteiro é retornado. Tenha cuidado com esse operador. Se você alterar um objeto CString depois de obter o ponteiro de caracteres, poderá causar uma realocação da memória que invalidará o ponteiro.

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::operator PCXSTR.

// If the prototype of a function is known to the compiler,
// the PCXSTR cast operator may be invoked implicitly.

CSimpleString strSports(L"Soccer is Best!", pMgr);
WCHAR sz[1024];

wcscpy_s(sz, strSports);

// If the prototype isn't known or is a va_arg prototype,
// you must invoke the cast operator explicitly. For example,
// the va_arg part of a call to swprintf_s() needs the cast:

swprintf_s(sz, 1024, L"I think that %s!\n", (PCWSTR)strSports);

// While the format parameter is known to be an PCXSTR and
// therefore doesn't need the cast:

swprintf_s(sz, 1024, strSports);

// Note that some situations are ambiguous. This line will
// put the address of the strSports object to stdout:

wcout << strSports;

// while this line will put the content of the string out:

wcout << (PCWSTR)strSports;

CSimpleStringT::PCXSTR

Um ponteiro para uma cadeia de caracteres constante.

Sintaxe

typedef ChTraitsBase< BaseType >::PCXSTR PCXSTR;

CSimpleStringT::Preallocate

Aloca uma quantidade específica de bytes para o objeto CSimpleStringT.

Sintaxe

void Preallocate( int nLength);

Parâmetros

nLength
O tamanho exato do buffer de caracteres CSimpleStringT em caracteres.

Comentários

Chame esse método para alocar um tamanho do buffer específico para o objeto CSimpleStringT.

CSimpleStringT gerará uma exceção STATUS_NO_MEMORY se não for possível alocar espaço para o buffer de caracteres. Por padrão, a alocação de memória é executada pelas funções de API WIN32 HeapAlloc ou HeapReAlloc.

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::Preallocate.

CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();

CSimpleString str(pMgr);
_tprintf_s(_T("Allocated length: %d\n"), str.GetAllocLength());
str.Preallocate(100);
_tprintf_s(_T("Allocated length: %d\n"), str.GetAllocLength());

A saída desse exemplo é a seguinte:

Allocated length: 0
Allocated length: 103

CSimpleStringT::PXSTR

Um ponteiro para uma cadeia de caracteres.

Sintaxe

typedef ChTraitsBase< BaseType >::PXSTR PXSTR;

CSimpleStringT::ReleaseBuffer

Libera o controle do buffer alocado por GetBuffer.

Sintaxe

void ReleaseBuffer(int nNewLength = -1);

Parâmetros

nNewLength
O novo comprimento da cadeia de caracteres em caracteres, sem contar um terminador nulo. Se a cadeia de caracteres for terminada em nulo, o valor padrão -1 definirá o tamanho CSimpleStringT como o comprimento atual da cadeia de caracteres.

Comentários

Chame esse método para realocar ou liberar o buffer do objeto de cadeia de caracteres. Se souber que a cadeia de caracteres no buffer é terminada em nulo, você poderá omitir o argumento nNewLength. Se a cadeia de caracteres não for terminada em nulo, use nNewLength para especificar seu comprimento. O endereço retornado por GetBuffer é inválido após a chamada para ReleaseBuffer ou qualquer outra operação CSimpleStringT.

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::ReleaseBuffer.

const int bufferSize = 1024;
CSimpleString s(_T("abc"), pMgr);
LPTSTR p = s.GetBuffer(bufferSize);
_tcscpy_s(p, bufferSize, _T("abc"));

// use the buffer directly
ASSERT(s.GetLength() == 3);

// String length = 3
s.ReleaseBuffer();

// Surplus memory released, p is now invalid.
ASSERT(s.GetLength() == 3);

// Length still 3

CSimpleStringT::ReleaseBufferSetLength

Libera o controle do buffer alocado por GetBuffer.

Sintaxe

void ReleaseBufferSetLength(int nNewLength);

Parâmetros

nNewLength
O comprimento da cadeia de caracteres a ser liberada

Comentários

Essa função é funcionalmente semelhante à ReleaseBuffer, exceto que um comprimento válido para o objeto de cadeia de caracteres deve ser passado.

CSimpleStringT::SetAt

Define um único caractere de um objeto CSimpleStringT.

Sintaxe

void SetAt(int iChar, XCHAR ch);

Parâmetros

iChar
Índice baseado em zero do caractere no objeto CSimpleStringT. O parâmetro iChar deve ser maior ou igual a 0 e menor que o valor retornado por GetLength.

ch
O caractere novo.

Comentários

Chame esse método para substituir o caractere localizado em iChar. Esse método não ampliará a cadeia de caracteres se iChar exceder os limites da cadeia de caracteres existente.

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::SetAt.

CSimpleString s(_T("abcdef"), pMgr);
s.SetAt(1, _T('a'));
ASSERT(_tcscmp(s, _T("aacdef")) == 0);

CSimpleStringT::SetManager

Especifica o gerenciador de memória do objeto CSimpleStringT.

Sintaxe

void SetManager(IAtlStringMgr* pStringMgr);

Parâmetros

pStringMgr
Um ponteiro para o novo gerenciador de memória.

Comentários

Chame esse método para especificar um novo gerenciador de memória usado pelo objeto CSimpleStringT. Para obter mais informações sobre gerenciadores de memória e objetos de cadeia de caracteres, confira Gerenciamento de memória e CStringT.

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::SetManager.

CSimpleString s(pMgr);
s.SetManager(pCustomMgr);

CSimpleStringT::SetString

Define uma cadeia de caracteres de um objeto CSimpleStringT.

Sintaxe

void SetString(PCXSTR pszSrc, int nLength);
void SetString(PCXSTR pszSrc);

Parâmetros

pszSrc
Um ponteiro para uma cadeia de caracteres terminada em nulo.

nLength
Uma contagem do número de caracteres em pszSrc.

Comentários

Copie uma cadeia de caracteres no objeto CSimpleStringT. SetString substitui os dados de cadeia de caracteres mais antigos no buffer.

Ambas as versões de SetString verificam se pszSrc é um ponteiro nulo e, se for, gerarão um erro E_INVALIDARG.

A versão de um parâmetro de SetString espera que pszSrc aponte para uma cadeia de caracteres terminada em nulo.

A versão de dois parâmetros de SetString espera que pszSrc seja uma cadeia de caracteres terminada em nulo. Ela usa nLength como o comprimento da cadeia de caracteres, a menos que encontre um terminador nulo primeiro.

A versão de dois parâmetros de SetString também verifica se pszSrc aponta para um local no buffer atual em CSimpleStringT. Nesse caso especial, SetString usa uma função de cópia de memória que não substitui os dados de cadeia de caracteres, pois copia os dados de cadeia de caracteres de volta para seu buffer.

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::SetString.

CSimpleString s(_T("abcdef"), pMgr);
ASSERT(_tcscmp(s, _T("abcdef")) == 0);
s.SetString(_T("Soccer"), 6);
ASSERT(_tcscmp(s, _T("Soccer")) == 0);

CSimpleStringT::StringLength

Retorna o número de caracteres na cadeia de caracteres especificada.

Sintaxe

ATL_NOINLINE static int StringLength(PCXSTR psz) throw();

Parâmetros

psz
Um ponteiro para uma cadeia de caracteres terminada em nulo.

Valor de retorno

O número de caracteres em psz, sem contar um terminador nulo.

Comentários

Chame esse método para recuperar o número de caracteres na cadeia de caracteres apontada por psz.

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::StringLength.

ASSERT(CSimpleString::StringLength(_T("soccer")) == 6);

CSimpleStringT::Truncate

Trunca a cadeia de caracteres no novo comprimento.

Sintaxe

void Truncate(int nNewLength);

Parâmetros

nNewLength
O novo comprimento da cadeia de caracteres.

Comentários

Chame esse método para truncar o conteúdo da cadeia de caracteres no novo comprimento.

Observação

Isso não afeta o comprimento alocado do buffer. Para diminuir ou aumentar o buffer atual, confira FreeExtra e Preallocate.

Exemplo

O exemplo a seguir demonstra o uso de CSimpleStringT::Truncate.

CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();
CSimpleString str(_T("abcdefghi"), pMgr);
_tprintf_s(_T("String length: %d / Allocated length: %d\n"), str.GetLength(), str.GetAllocLength());
_tprintf_s(_T("Contents: %s\n"), (LPCTSTR)str);
str.Truncate(4);
_tprintf_s(_T("String length: %d / Allocated length: %d\n"), str.GetLength(), str.GetAllocLength());
_tprintf_s(_T("Contents: %s\n"), (LPCTSTR)str);

A saída desse exemplo é:

String length: 9 / Allocated length: 15
Contents: abcdefghi
String length: 4 / Allocated length: 15
Contents: abcd

CSimpleStringT::UnlockBuffer

Desbloqueia o buffer do objeto CSimpleStringT.

Sintaxe

void UnlockBuffer() throw();

Comentários

Chame esse método para redefinir a contagem de referência da cadeia de caracteres para 1.

O destruidor CSimpleStringT chama UnlockBuffer automaticamente para garantir que o buffer não esteja bloqueado quando o destruidor for chamado. Para obter um exemplo desse método, confira LockBuffer.

CSimpleStringT::~CSimpleStringT

Destrói um objeto CSimpleStringT.

Sintaxe

~CSimpleStringT() throw();

Comentários

Chame esse método para destruir o objeto CSimpleStringT.

Confira também

Gráfico da hierarquia
Classes compartilhadas ATL/MFC