如何在构造函数的初始化列表中初始化共享指针?
我有这个:
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.
};
答案 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 ) )
{
// ...
}