注:本文是公司同事的一个分享,由于很有代表性,特分享在此,希望对大家有用。 上次welkin在处理一个豆瓣的cgi时遇到1个奇怪的问题,就是对一个string对象的修改引起了另一个string对象的同步修改。后来定位到原有,是因为有函数对string对象的buf内容直接进行了操作,破坏了“写时拷贝”的规则。下面这个例子说明了问题是如何产生的,已经如何避免:
int main()
{
string str1 = "abcd";
string str2 = str1;
char *p1 = const_cast<char*>(str1.c_str());
p1[0] = 'o';
//这里str1和str2同时被修改了
printf("%s %s\n", str1.c_str(), str2.c_str());
string str3 = "abcd";
string str4 = str3;
char *p2 = &(str3[0]);
p2[0] = 'o';
//这里只有str3被修改,str4不变
printf ...