【发布时间】:2013-05-17 08:43:59
【问题描述】:
我想知道我是否误解了什么:来自std::string 的复制构造函数不复制其内容吗?
string str1 = "Hello World";
string str2(str1);
if(str1.c_str() == str2.c_str()) // Same pointers!
printf ("You will get into the IPC hell very soon!!");
这将打印“你很快就会进入 IPC 地狱!!”这让我很烦。
这是std::string 的正常行为吗?我在某处读到它通常会进行深层复制。
但是,这按预期工作:
string str3(str1.c_str());
if(str1.c_str() == str3.c_str()) // Different pointers!
printf ("You will get into the IPC hell very soon!!");
else
printf ("You are safe! This time!");
它将内容复制到新字符串中。
【问题讨论】:
-
尝试在您的第一个示例中修改
str2(例如str2[0] = 'B';)并然后比较c_str()的值。 -
不管怎样,GCC 4.7 在 C++03 和 C++11 模式下具有相同的行为(@Angew 的建议确实产生了不同的
c_str()值)。 -
显然它会在您建议 @Angew 进行编辑后分配一个新的缓冲区。所以这似乎是某种“优化”……我们花了好几个小时才找到这个问题。*叹气*
标签: c++ gcc copy-constructor deep-copy stdstring