I wonder if i misunderstood something: does a copy constructor from std::string
not copy its content?
string str1 = \"Hello World\"
It is entirely possible that your string
implementation uses copy-on-write which would explain the behavior. Although this is less likely with newer implementations (and non-conforming on C++11 implementations).
The standard places no restriction on the value of the pointer returned by c_str
(besides that it points to a null-terminated c-string), so your code is inherently non-portable.
std::string
implementation in your compiler must be reference counted. Change one of the strings and then check the pointers again - they would be different.
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!!");
str2.replace(' ',',');
// Check again here.
These are 3 excellent articles on reference counted strings.
http://www.gotw.ca/gotw/043.htm
http://www.gotw.ca/gotw/044.htm
http://www.gotw.ca/gotw/045.htm