Devrais-je utiliser le pointeur à std::string
Dans l'apprentissage du c++, j'ai d'abord utiliser la bibliothèque Qt au lieu de la norme C++, STL et tout ce qui (Ok, je suis nouveau en c++ et gâtés par Qt). Sur l'intervalle Qt, QString utilisé implicite de partage, donc me permettre de simplement copier l'affecter à une autre variable comme:
QString var1=QString("Hi there!");
QString var2=var1
Et qui ferait bien sans trop de frais généraux. Mais maintenant, je suis en train std::string oui, dois-je faire
std::string var1=std::string()
ou
std::string* var1=new std::string()
Et aussi, comment à propos de QVector et std::vector. Et Si je dois utiliser le pointeur... des conseils?
OriginalL'auteur asdacap | 2011-10-30
Vous devez vous connecter pour publier un commentaire.
Si
std::string
utilise de copie sur écriture dépend de la mise en œuvre (c'est à dire votre bibliothèque standard vendeur décide que). Cependant, la plupart desstd::string
implémentations de ne pas utiliser de VACHE, en grande partie en raison du fait que la plupart, si pas toutes les opérations de lecture de la force d'une copie --operator[]
renvoie une référence,c_str()
etdata()
retourner un pointeur. Comparez cela àQString::operator[]
, qui retourne un objet proxy.En dépit de ce qui précède, ne pas utiliser de pointeurs vers
std::string
, à moins que vous déterminer (par mesure) que la chaîne de copies sont le goulot d'étranglement dans votre application.Aussi, méfiez-vous que
QString
magasins UTF-16 chaînes, tandis questd::string
stocke une séquence dechar
s --QByteArray
serait l'intervalle Qt équivalent.bon à savoir, merci!
OriginalL'auteur avakar
std::string classe a un
=
opérateur défini comme:OriginalL'auteur Alok Save
Ne pas le faire. Il suffit de passer par référence dans la mesure du possible:
Si vous avez vraiment besoin de partager la chaîne, utilisez:
OriginalL'auteur ybungalobill
Si vous allez revenir
std::string
à partir de la fonction, puis ne pas utiliser de pointeur de retour par valeur. Dans ce cas, le plus probable Valeur De Retour D'Optimisation seront appliquées et les données de chaîne ne sera pas copié.OriginalL'auteur ks1322