我首先要说我已经阅读了这个主题: C++ Return reference / stack memory 。但是,问题在于 std::vector<int>
作为对象类型。但我虽然 std::string
的行为不同。这个类不是专门为使用字符串而设计的,而不必担心内存泄漏和错误使用内存吗?
所以,我已经知道这是错误的:
std::vector<t> &function()
{
vector<t> v;
return v;
}
但这也是错误的吗?
std::string &function()
{
string s = "Faz";
s += "Far";
s += "Boo";
return s;
}
谢谢
额外问题(编辑): 所以,当我说 返回(按值) 一个 std::string
时,我是否正确,它不会复制字符序列,只是一个指向 char *
数组的指针和一个 size_t
长度?
如果这个陈述是正确的,这是创建一个字符串的深层副本的有效方法(以避免一次操作两个字符串)吗?
string orig = "Baz";
string copy = string(orig);
原文由 Martijn Courteaux 发布,翻译遵循 CC BY-SA 4.0 许可协议
您真的很接近使这些功能起作用:
只需让他们返回一个副本而不是一个参考,你就设置好了。这就是您想要的,基于堆栈的字符串的副本。
它也变得更好了,因为返回值优化 (RVO) 只会创建一次字符串并返回它,就像您在堆上创建它并返回对它的引用一样,所有这些都在幕后!