通过引用传递与通过shared_ptr传递

Ada*_*dam 4 c++ shared-ptr c++11

Stackoverflow上的大多数问题都是关于shared_ptr应该通过ref或value传递.不过我的问题是这样的例子:

class Foo;

void function1(Foo & ff) { ff.m_abc = 1024; }
void function2(const std::shared_ptr<Foo> & ff) { ff->m_abc = 1024; }
Run Code Online (Sandbox Code Playgroud)

function1function2可以使用和改变FF的某些部分.


我的情况在这里:

我需要使用arg *this或者调用函数shared_from_this().

print(msg, *this);

or

print(msg, this->shared_from_this());
Run Code Online (Sandbox Code Playgroud)

我可以在我的代码中使用function1function2样式化一个函数.

但是,如果我使用function2样式,我需要实现Foo继承std::enable_shared_from_this,但是有了function1样式,我不需要.

我在单线程环境中使用此功能

Seb*_*edl 9

你只传递shared_ptr给函数如果函数在乎那里是一个shared_ptr,通常是因为它要保留一份副本,或weak_ptr.

任何其他东西只会降低功能的适用性而无法获得.

  • 调用者有责任确保在函数运行时它给函数的引用不会变为无效.别的什么都是疯了.如果调用者在其堆栈上有一个`shared_ptr`,那么你就是安全的. (4认同)
  • @JohnDibling然后你拍摄你的开发者从星期日开始搞乱3种方式.从引用创建`shared_ptr`?坏.为您没有创建的资源创建`shared_ptr`?坏.为你没有创建的资源创建`shared_ptr`是'enable_shared_from_this`而不是调用`shared_from_this`?他们最好带甜甜圈. (3认同)