Mi chiedo se ho frainteso qualcosa: un costruttore di copia da std::string
non copia il suo contenuto?std :: costruttore di stringhe di stringhe NON in profondità 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!!");
Questo stamperà "Otterrete nell'inferno IPC molto presto !!" e mi infastidisce
Si tratta del normale comportamento di std::string
? Ho letto da qualche parte che di solito fa una copia profonda.
Tuttavia, questo funziona come previsto:
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!");
Si copia il contenuto nella nuova stringa.
Provate a modificare 'str2' nel primo esempio (ad esempio' str2 [0] = 'B'; ') e * poi * confrontando il' c_str () valori. – Angew
Per quello che vale, GCC 4.7 ha lo stesso comportamento sia in modalità C++ 03 e C++ 11 (e il suggerimento di @ Angew produce infatti valori 'c_str()' diversi). – syam
Appare in modo allettante un nuovo buffer dopo la modifica u sugestato @Angew. Quindi sembra essere una sorta di "ottimizzazione" ... ci è costato diverse ore di lavoro per trovare quel problema. * Sigh * –