何かが誤解されているかどうか疑問に思う:コピーコンストラクタはstd::string
ではないの内容をコピーしますか?std :: stringコピーコンストラクタ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!!");
「これはすぐに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を(比較*次いで及び*を) '値を返します。 – Angew
GCC 4.7は、C++ 03とC++ 11の両方のモードで同じ動作をします(@ Angewの提案では、実際には異なる 'c_str()'値が得られます)。 – syam
明らかに、@Ungewを編集した後、新しいバッファを割り当てます。だから、ある種の "最適化"のようです...その問題を見つけるのに数時間の労力を要しました* –