gpt4 book ai didi

c++ - 我应该返回对堆对象的引用还是返回值?

转载 作者:太空狗 更新时间:2023-10-29 19:56:28 26 4
gpt4 key购买 nike

我有这两个简单的功能。我认为 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;
}

最佳答案

Should I return reference to heap object or return value?

按值返回。

有很多原因,但没有一个真正与性能相关,因为编译器在优化事物方面足够好,即使不是,大多数程序都是 I/O-bound,即你的时间等待来自文件或网络套接字的数据会耗尽您的所有性能,而不是 CPU 操作本身所花费的时间。

例如,参见 Herb Sutter 和 Bjarne Stroustrup 的“C++ 核心指南”,在 "Return containers by value (relying on move or copy elision for efficiency)" 节中说:

Reason

To simplify code and eliminate a need for explicit memory management.

至于你的两个函数...

My textbook gave func2 as the answer for the best solution. Is this only because you aren't deallocateing heapstr?

内存泄漏是问题之一。但重点很简单,按值返回更简单,更不容易出错。一切都是为了正确性,而不是速度。如果您可以只返回一个 int,您就不会返回一个 int*,对吗?

What if I declared heapstr in main and then passed it to the function so I was able to delete it afterwards?

您会在代码中引入很多内存泄漏、崩溃和未定义行为的可能性。它会变得更长、更难编写、更难阅读、更难维护、更难调试以及更难在代码审查中证明其合理性。作为返回,您将一无所获。

关于c++ - 我应该返回对堆对象的引用还是返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47737630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com