当以const char*调用接收const std::string&的函数时会产生深拷贝吗?
问题解答
当你调用foo(buffer)时,会触发深拷贝,具体过程如下:
- 因为函数参数是
const std::string&,而传入的是const char*类型,编译器会自动调用std::string的构造函数,临时创建一个std::string对象。 std::string从const char*构造时,会在内部分配新的内存空间,把buffer指向的字符数据完整复制到这个新空间里。- 这个临时
std::string对象会被绑定到函数的str引用上,函数使用的是这个复制后的字符串实例。
这里不存在浅拷贝,因为原buffer是栈上的字符数组,std::string不会共享它的内存,而是独立复制一份内容。
内容的提问来源于stack exchange,提问作者Kaiyakha
相关产品推荐
相关产品推荐

