use*_*517 2 c++ struct shared-ptr unique-ptr c++11
在C++ 11中将结构作为输出传递的最佳实践是什么?
是否应该在外部函数中创建结构,还是在外部函数维护所有权时创建内部结构?
而且,它应该是shared_ptr还是unique_ptr?
例如,假设我有一个复杂的结构:
struct Error {
string Code;
string Message;
string Details;
string Command;
};
struct Response {
stringstream Data;
bool Success;
Error Error;
};
Run Code Online (Sandbox Code Playgroud)
然后,从调用函数,我想说:
Response r;
getResponse( url, &r );
Run Code Online (Sandbox Code Playgroud)
应将getResponse定义为:
getResponse( string, shared_ptr ); or
getResponse( string, unique_ptr );
Run Code Online (Sandbox Code Playgroud)
另外,如何声明字符串和字符串流?他们也应该是shared_ptr吗?
在这种情况下,getResponse函数一旦完成就不希望与响应有任何关系,并且响应本身的生命周期应由调用者决定.
声明和填充结构的最佳实践是什么?
现代编译器非常擅长优化函数返回值的方式,因此通常在有意义时按值返回:
// Just return by value
Response getResponse(const std::string& url)
{
Response r;
// ...
return r;
}
Run Code Online (Sandbox Code Playgroud)