在C++ 11中将结构作为输出参数传递

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函数一旦完成就不希望与响应有任何关系,并且响应本身的生命周期应由调用者决定.

声明和填充结构的最佳实践是什么?

Gal*_*lik 8

现代编译器非常擅长优化函数返回值的方式,因此通常在有意义时按值返回:

// Just return by value
Response getResponse(const std::string& url)
{
    Response r;

    // ...

    return r;
}
Run Code Online (Sandbox Code Playgroud)