C++ STL Chaîne Constructeur de Copie - Toujours une Copie en Profondeur?

J'ai vu plusieurs références contradictoires pour le constructeur de copie comportement de STL chaînes de caractères en C++ et j'espérais que quelqu'un pourrait clarifier la situation pour moi, vu le segment de code suivant:

string str() { return string("this is a string"); }
//meanwhile, in some other function...
string s = str();

Fait l'objet d'un " s " constituent une copie en profondeur de la chaîne de l'objet défini dans la fonction str()'? ou est l'objet d'un " s " simplement en pointant sur le même bloc de mémoire alloué au cours de la chaîne de l'appel du constructeur dans le 'str ()?

Il n'a pas d'importance ce que la copie exacte de la sémantique, parce que tout sane compilateur d'optimiser toutes les copies de suite dans l'exemple ci-dessus. Et si, pour une raison qui n'est pas possible, la sémantique de déplacement sont nécessaires à coup de pied dans.

OriginalL'auteur Gearoid Murphy | 2011-12-11