Gerenciamento de dados da cadeia de caracteres
O Visual C++ fornece várias maneiras de gerenciar dados de cadeia de caracteres:
Manipulação de cadeia de caracteres para trabalhar com cadeias de caracteres terminadas em
NULL
do estilo CFunções de API do Win32 para gerenciar cadeias de caracteres
A
CStringT
Class da classe da MFC, que fornece objetos de cadeia de caracteres flexíveis e redimensionáveisClasse
CStringT
Class, que fornece um objeto de cadeia de caracteres independente de MFC com a mesma funcionalidade queCString
Quase todos os programas funcionam com dados de cadeia de caracteres. A classe CString
da MFC geralmente é a melhor solução para o tratamento flexível de cadeias de caracteres. A partir da versão 7.0, CString
pode ser usado em programas de MFC ou independentes de MFC. A biblioteca de runtime e CString
dão suporte às cadeias de caracteres que contêm caracteres multibyte (largos), como na programação Unicode ou MBCS.
Este artigo descreve os serviços de uso geral que a biblioteca de classes fornece relacionados à manipulação de cadeias de caracteres. Os tópicos abordados neste artigo incluem:
A classe CStringT
Class fornece suporte para manipular cadeias de caracteres. Ela destina-se a substituir e estender a funcionalidade normalmente fornecida pelo pacote de cadeias de caracteres da biblioteca de runtime C. A classe CString
fornece funções e operadores de membro para tratamento simplificado de cadeias de caracteres, semelhantes aos encontrados no Basic. A classe também fornece constructors e operadores para construir, atribuir e comparar CString
s e tipos de dados de cadeia de caracteres C++ padrão. Como CString
não é derivado de CObject
você pode usar objetos CString
independentemente da maior parte da biblioteca Microsoft Foundation Class (MFC).
Os objetos CString
seguem a "semântica de valor". Um objeto CString
representa um valor exclusivo. Pense em um CString
como uma cadeia de caracteres real, não como um ponteiro para uma cadeia de caracteres.
Um objeto CString
representa uma sequência de um número variável de caracteres. Os objetos CString
podem ser considerados como matrizes de caracteres.
Portabilidade do Unicode e do MBCS Provide
Com a versão 3.0 da MFC e posteriores, a MFC, incluindo CString
, está habilitado para conjuntos de caracteres Unicode e multibyte (MBCS). Esse suporte facilita a gravação de aplicativos portáteis que você pode criar para caracteres Unicode ou ANSI. Para habilitar essa portabilidade, cada caractere em um objeto CString
é do tipo TCHAR
, que será definido como wchar_t
se você definir o símbolo _UNICODE
ao compilar seu aplicativo ou como char
se não fosse. Um caractere wchar_t
tem 16 bits de largura. O MBCS será habilitado se você criar com o símbolo _MBCS
definido. A MFC em si é criada com o símbolo _MBCS
(para as bibliotecas NAFX) ou o símbolo _UNICODE
(para as bibliotecas UAFX) definido.
Observação
Os exemplos CString
nisso e nos artigos que acompanham as cadeias de caracteres mostram cadeias de caracteres literais formatadas corretamente para portabilidade Unicode, usando a macro _T
, que converte a cadeia de caracteres literal na forma:
L"literal string"
Observação
que o compilador trata como uma cadeia de caracteres Unicode. Por exemplo, o código a seguir:
CString strName = _T("Name");
Observação
será convertido como uma cadeia de caracteres Unicode se _UNICODE
for definido ou como uma cadeia de caracteres ANSI, se não for. Para obter mais informações, confira o artigo Suporte ao MBCS (Conjunto de Caracteres Multibyte) e ao Unicode.
Um objeto CString
pode armazenar até INT_MAX
(2.147.483.647) caracteres. O tipo de dados TCHAR
é usado para obter ou definir caracteres individuais dentro de um objeto CString
. Ao contrário das matrizes de caracteres, a classe CString
tem uma funcionalidade de alocação de memória interna. Isso permite que os objetos CString
cresçam automaticamente conforme necessário (ou seja, você não precisa se preocupar com o crescimento de um objeto CString
para se ajustar a cadeias de caracteres mais longas).
CStrings
e const char
ponteiros
Um objeto CString
também pode agir como uma cadeia de caracteres literal no estilo C (um PCXSTR
, que é o mesmo que const char*
se não estivesse sob Unicode). O operador de conversão CSimpleStringT::operator PCXSTR
permite que os objetos CString
sejam substituídos livremente por ponteiros de caractere em chamadas de função. O constructor CString(LPCWSTR pszSrc)
permite que ponteiros de caractere sejam substituídos por objetos CString
.
Nenhuma tentativa é feita para dobrar objetos CString
. Se você fizer dois objetos CString
contendo Chicago
, por exemplo, os caracteres em Chicago
serão armazenados em dois lugares. (Isso pode não ser verdadeiro para versões futuras da MFC, portanto, você não deve depender disso.)
Observação
Use as funções membro CSimpleStringT::GetBuffer
e CSimpleStringT::ReleaseBuffer
quando precisar acessar diretamente um CString
como ponteiro não compatível com um caractere.
Observação
Use as funções de membro CStringT::AllocSysString
e CStringT::SetSysString
para alocar e definir objetos BSTR
usados na Automação (anteriormente conhecida como Automação OLE).
Observação
Sempre que possível, aloque objetos CString
no quadro em vez de no heap. Isso salva a memória e simplifica a passagem de parâmetros.
A classe CString
não é implementada como uma classe de coleção da biblioteca Microsoft Foundation Class, embora os objetos CString
certamente possam ser armazenados como elementos em coleções.
Contagem de referências CString
A partir da versão 4.0 da MFC, quando objetos CStringT
Class são copiados, a MFC incrementa uma contagem de referências em vez de copiar os dados. Isso torna mais eficiente a passagem de parâmetros por valor e o retorno de objetos CString
por valor. Essas operações fazem com que o construtor de cópia seja chamado, às vezes, mais de uma vez. Incrementar uma contagem de referência reduz essa sobrecarga para essas operações comuns e torna o uso de CString
uma opção mais atraente.
À medida que cada cópia é destruída, a contagem de referência no objeto original é decrementada. O objeto original CString
não será destruído até que sua contagem de referência seja reduzida a zero.
Você pode usar as funções de membro CString
CSimpleStringT::LockBuffer
e CSimpleStringT::UnlockBuffer
para desabilitar ou habilitar a contagem de referências.