我需要一些关于使用std::shared_ptr
输入/输出参数的建议。有类似的东西
std::shared_ptr<Big> expensive_process(std::shared_ptr<Big> foo)
{
// process foo
...
return foo;
}
被认为是不好的做法(与通常的做法相反void expensive_process(Big& foo)
)?。foo
当是局部变量或临时变量时,此签名统一工作(如果在任何地方都采用) ,例如expensive_process(another_process(foo))
or expensive_process(foo->clone())
。
基本原理
我目前在就地处理数据时使用以下签名:
void process(Big& foo);
将签名更改为shared_ptr<Big> process(shared_ptr<Big> foo)
有两个主要好处:
- 它允许链接,即
foo = f1(f2(foo))
如果两者具有相同的签名则f1
有效f2
。 - 其次,它允许统一使用局部变量和临时变量,即
foo = f1(foo)
两者another_foo = f1(foo->clone())
都有效。
使用原始签名,这两者都不可能。