Gea*_*phy 11 c++ memory string copy-constructor
我已经看到了对C++中STL字符串的复制构造函数行为的各种冲突引用,我希望有人可以为我澄清这一点,给出以下代码段:
string str() { return string("this is a string"); }
//meanwhile, in some other function...
string s = str();
Run Code Online (Sandbox Code Playgroud)
对象''是否构成函数'str()'中定义的字符串对象的深层副本?或者是对象''简单地指向在'str()'函数中的字符串构造函数调用期间分配的同一块内存?
字符串将深层复制,它们不共享相同的缓冲区.
也就是说当从函数返回它们时,大多数优秀的编译器可以使用返回值优化或复制省略,这样操作就不那么昂贵(甚至免费).
如果你使用的是c ++ 11,那么移动语义是由标准指定的,所以对于像返回字符串这样的东西,请确保最坏的情况(即使没有优化)相当便宜.
编辑:总结一下,您可以保证您"拥有"的字符串将具有唯一的内存块,该内存块将至少持续至少本地字符串的生命周期.但是,编译器很可能不会从函数中的字符串中复制它,而只是交换它的指针,甚至完全省略了副本(意味着函数中的字符串实际上也是你指定的字符串).