【发布时间】:2011-06-17 16:19:38
【问题描述】:
首先我会说我已经阅读过这个主题: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 * 数组的指针和一个t_size 的长度?
如果这句话是正确的,这是否是创建一个字符串的深拷贝的有效方法(避免替换会改变字符串)?
string orig = "Baz";
string copy = string(orig);
【问题讨论】:
-
回答你的额外问题:不,你有错误的想法。创建
std::string的副本始终会创建一个副本。这个问题的答案正确指出的是,使用 RVO,可以正确编写函数(返回值)并避免首先创建副本。请参阅下面@Martinho 的回答:没有副本!
标签: c++ memory-management reference