【发布时间】:2017-12-10 09:48:15
【问题描述】:
我有这两个简单的功能。我认为func1 是一个很好的解决方案,因为您通过引用传递对象。我的教科书给出了func2 作为最佳解决方案的答案。这仅仅是因为您没有取消分配heapstr 吗?如果我在 main 中声明 heapstr 然后将其传递给函数以便之后删除它会怎样?
#include <iostream>
using namespace std;
string& func1(const string &str) {
string* heapstr=new string();
for (int i = 0; i < str.size(); ++i) {
*heapstr += str[i];
}
return *heapstr;
}
string func2(const string &str) {
string heapstr;
for (int i = 0; i < str.size(); ++i) {
heapstr += str[i];
}
return heapstr;
}
int main() {
cout << func1("aaa") << endl;
cout << func2("aaa") << endl;
}
【问题讨论】:
-
价值!始终喜欢将值作为默认值!甚至没有谈论泄漏。
-
func2,更安全更快捷(stackoverflow.com/questions/161053/…) -
如果你想使用一个普通的指针,再想一想,如果你真的有充分的理由这样做。
标签: c++ performance memory-management reference