std :: string是否重新计算分配的内存? pass-by-value和pass-by-reference不同的std :: string情况如何?

时间:2015-02-19 04:23:55

标签: c++ c++11 automatic-ref-counting

如果它进行了引用计数,那么在传递值的情况下是否存在无效内存访问的可能性,因为内存中有单个字符串副本?

1 个答案:

答案 0 :(得分:-1)

大多数string实现执行称为copy-on-write的操作,这意味着只需按值复制字符串(通过复制构造函数或operator=或诸如此类),就不会分配新内存并且不会复制字符串内容。只有当你写这个共享缓冲区时它才会复制,递减引用计数器让最后一个字符串保持活动状态写入它自己的缓冲区。

这一切都是透明的,除了学术价值之外,你不应该关心它是如何运作的。