string a("aaaa");
string b;
b = a;
const char* p1 = a.c_str();
const char* p2 = b.c_str();
if (p1 == p2)
{
printf("true");
}
else
{
printf("false");
}
以上代碼在windows輸出false,在linux輸出true.
原因就是因為linux下用的是寫時拷貝,所以當編譯器在賦值並不分配內存,而且a和b公用同一份內存。當調用string中的函數改變b時,才分配內存。
注意是通過string的函數,如果用b.c_str()獲得的指針強制修改b,因為這種修改繞開了寫時拷貝,a和b公用的同一份內存,所以a也改變。
本文出自 “ 出發了” 博客