如何在构造函数的初始化列表中初始化共享指针?

How to initialize a shared pointer in the initialization list of a constructor?

如何在构造函数的初始化列表中初始化共享指针?

我有这个:

Foo::Foo (const callback &cb)
{
    Bar bar;
    bar.m_callback = cb;
    m_ptr = std::make_shared<Bar>(bar);

    //...
}

我想把它放入构造函数的初始化列表中。 类似于:

Foo::Foo (const callback &cb) :
   m_ptr(std::make_shared<Bar>(?????))
{
  // ...
}

栏是 struct:

struct Bar
{
  callback_type m_callback;
  // etc.
};

实施构造函数 Bar::Bar( const callback & ) 将是显而易见的解决方案...?!?

Foo::Foo( const callback & cb ) :
   m_ptr( std::make_shared<Bar>( cb ) )
{
    // ...
}

添加构造函数explicit Bar::Bar(const callback&)explicit 将防止与自动转换相关的错误。然后你可以像这样初始化一个shared_ptr<Bar>

Foo::Foo(const callback& cb)
  : m_ptr(std::make_shared<Bar>(cb))

请参阅 make_shared here 的文档。