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

waa*_*919 9 c++ constructor shared-ptr c++11

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

我有这个:

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

    //...
}
Run Code Online (Sandbox Code Playgroud)

我想把它放到构造函数的初始化列表中.就像是:

Foo::Foo (const callback &cb) :
   m_ptr(std::make_shared<Bar>(?????))
{
  // ...
}
Run Code Online (Sandbox Code Playgroud)

酒吧是struct:

struct Bar
{
  callback_type m_callback;
  // etc.
};
Run Code Online (Sandbox Code Playgroud)

Bar*_*zKP 8

添加构造函数explicit Bar::Bar(const callback&).explicit将防止与自动转换相关的错误.

更好的是,如果Bar是聚合,你可以使用大括号初始值设定项:

Foo::Foo(const callback& cb)
  : m_ptr(std::make_shared<Bar>(Bar{cb}))
Run Code Online (Sandbox Code Playgroud)