Чудя се дали не съм разбрал нещо погрешно: дали конструкторът за копиране от 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