首先我会说我已经阅读了这个主题: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);
最佳答案
类型是什么并不重要;对于任何对象类型 T
,此模式始终是完全错误的,100% 错误:
T& f() {
T x;
return x;
} // x is destroyed here and the returned reference is thus unusable
如果你从一个函数返回一个引用,你必须确保它所引用的对象在函数返回后仍然存在。由于具有自动存储持续时间的对象在声明它们的 block 的末尾被销毁,因此它们保证不在函数返回后存在。
关于C++:从堆栈内存返回 std::string 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6388698/