0

我需要一些关于使用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)有两个主要好处:

  1. 它允许链接,即foo = f1(f2(foo))如果两者具有相同的签名则f1有效f2
  2. 其次,它允许统一使用局部变量和临时变量,即foo = f1(foo)两者another_foo = f1(foo->clone())都有效。

使用原始签名,这两者都不可能。

4

0 回答 0