【发布时间】:2021-06-17 03:52:07
【问题描述】:
很难用语言表达,所以直接跳一段半伪代码。
我有一个下载函数 (http GET),它在我的主代码中被多次调用。
std::string download_data(){
std::shared_ptr<HttpResponse> response = some_http_client->send_request("some_link");
return std::string(response->body()); // response->body() is a std::string_view.
}
我正在使用的http_client,返回一个shared_ptr作为响应,这个响应(我排除了HTTP错误处理的代码,假设它是200。),包含一个response->body(),它是一个@987654325 @。
此代码运行良好,但是,我想确保每次调用/返回此函数时都不会复制下载的数据。
我的主要问题:
- 我使用的当前代码是否有返回值优化? (有什么需要做的吗?)
- 如果没有,我可以直接返回
return response->body();吗?函数返回后,shared_ptr中的string_view是否有效?
我考虑过或在旧版本代码中使用的东西:
- 返回
std::string(另一个 http 客户端返回std::string作为正文)。 - 返回
std::move。 - 不用写函数,只要把函数体调用这个函数的所有地方都替换掉,直接使用
response->body,避免返回(我讨厌它)。
这样做的正确方法是什么?
我的工具链:
Ubuntu 20.04 (GLIBC 2.31)、g++ 10.2、C++20。
【问题讨论】:
标签: c++ optimization object-lifetime return-value-optimization