- 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也改变。
转载于:https://blog.51cto.com/chenchao40322/623527