Zastanawiam się, czy coś źle zrozumiałem: czy konstruktor kopii od std::string
nie skopiuj jego zawartość?Konstruktor kopii std :: string NOT in GCC 4.1.2?
string str1 = "Hello World";
string str2(str1);
if(str1.c_str() == str2.c_str()) // Same pointers!
printf ("You will get into the IPC hell very soon!!");
To wydrukuje "Wkrótce wejdziesz do piekła IPC!" i to mnie denerwuje. To jest normalne zachowanie std::string
? Czytałem gdzieś, że zwykle robi głęboką kopię.
Jednak to działa zgodnie z oczekiwaniami:
string str3(str1.c_str());
if(str1.c_str() == str3.c_str()) // Different pointers!
printf ("You will get into the IPC hell very soon!!");
else
printf ("You are safe! This time!");
kopiuje zawartość do nowego łańcucha.
Spróbuj zmodyfikować 'str2' w pierwszym przykładzie (np' słowo2 [0] = 'B'; ') * a *, a następnie porównanie' c_str () 'wartości. – Angew
Dla tego, co jest warte, GCC 4.7 ma takie samo działanie zarówno w C++ 03, jak i C++ 11 (i sugestia @ Angewa rzeczywiście daje różne wartości 'c_str()'). – syam
Najprawdopodobniej przydziela nowy bufor po skończonej próbie @Angew. Wygląda więc na jakąś "optymalizację" ... kosztowało nas to kilka godzin pracy, aby znaleźć ten problem. * Wzdychanie * –