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

时间:2015-07-20 09:34:28

标签: c++ c++11 constructor shared-ptr

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

我有这个:

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>(?????))
{
  // ...
}

Bar是struct

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

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:2)

实现构造函数Bar::Bar( const callback & )将是明显的解决方案......?!?

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