Интересно, я что-то неправильно понял: конструктор копирования из std::string
не копирует свое содержимое?
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!!");
Это напечатает «Очень скоро вы попадете в ад IPC!!» и меня это раздражает.
Это нормальное поведение std::string
? Я где-то читал, что он обычно делает глубокую копию.
Однако это работает так, как ожидалось:
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!");
Он копирует содержимое в новую строку.
str2
в первом примере (например,str2[0] = 'B';
) и затем сравнить значенияc_str()
. - person Angew is no longer proud of SO   schedule 17.05.2013c_str()
). - person syam   schedule 17.05.2013