我要先说一下,我已经阅读过这个主题: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);
std::string
的副本总是会创建一个副本。这个问题的答案正确地指出了使用 RVO,可以正确编写函数(返回值),并且在第一次就避免创建副本。请参见下面 @Martinho 的答案:没有副本! - Tom