- 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也改變。