Quais classes de string usar em C ++?

temos um aplicativo de desktop multithread em C ++ (MFC). Atualmente, os desenvolvedores usam CString ou std :: string, provavelmente dependendo do seu humor. Então, gostaríamos de escolher uma única implementação (provavelmente algo diferente daqueles dois).

O CString do MFC é baseado no idioma de cópia na gravação (COW) e algumas pessoas afirmam que isso é inaceitável em um ambiente multithread (e provavelmente referência aEste artigo) Não estou convencido de tais afirmações, pois os contadores atômicos parecem ser bastante rápidos, e também essa sobrecarga é de alguma forma compensada por uma redução nas realocações de memória.

Eu aprendi que a implementação do std :: string depende do compilador - não é COW no MSVC, mas é ou estava no gcc. Até onde eu entendi, o novo padrão C ++ 0x vai corrigir isso exigindo uma implementação não-COW e resolvendo outros problemas, como requisitos de buffer contíguos. Então, na verdade, std :: string não parece bem definido neste momento ...

Um exemplo rápido do que não gosto no std :: string: não há como retornar uma string de uma função sem realocações excessivas (construtor de cópia se retornar por valor e nenhum acesso ao buffer interno para otimizar isso " por referência "por exemplostd::string& Result não ajuda). Eu posso fazer isso com o CString retornando por valor (sem cópia devido ao COW) ou passando por referência e acessando o buffer diretamente. Novamente, C ++ 0x é resgatado com suas referências de rvalue, mas não vamos ter C ++ 0x no recurso mais próximo.

Qual classe de string devemos usar? COW pode realmente se tornar um problema? Existem outras implementações eficientes de strings comumente usadas? Obrigado.

Edição: Nós não usamos unicode no momento, e é improvável que vamos precisar dele. No entanto, se houver algo que suporte facilmente o unicode (não ao custo da UTI ...), isso seria uma vantagem.

questionAnswers(7)

yourAnswerToTheQuestion