copy-on-write造成的一个问题
copy-on-write是一种很有效率的做法,但是也会导致一些问题。
std::string 的 c_str() 会返回字符串对象对应的指针,而 std::string 大多数采用了 copy-on-write 的方法,因此在使用 c_str() 方法时,要格外注意。
示例代码(一看就懂):
1 #include<string> 2 #include<iostream> 3 4 int 5 main(void){ 6 std::string s("hello"); 7 std::string sub = s; 8 9 std::cout << s << std::endl; 10 std::cout << sub << std::endl; 11 12 char* s_ptr = (char*)s.c_str(); 13 char* sub_ptr = (char*)sub.c_str(); 14 15 if(s_ptr == sub_ptr) 16 std::cout << "the two pointers are same" << std::endl; 17 18 s_ptr[1] = 'o'; 19 20 std::cout << s << std::endl; 21 std::cout << sub << std::endl; 22 23 return 1; 24 }
最终输出是
hello
hello
the two pointers are same
hollo
hollo