C++ 如何在构造函数的初始化列表中初始化共享指针?
如何在构造函数的初始化列表中初始化共享指针 我有这个:C++ 如何在构造函数的初始化列表中初始化共享指针?,c++,c++11,constructor,shared-ptr,C++,C++11,Constructor,Shared Ptr,如何在构造函数的初始化列表中初始化共享指针 我有这个: Foo::Foo (const callback &cb) { Bar bar; bar.m_callback = cb; m_ptr = std::make_shared<Bar>(bar); //... } 实现构造函数Bar::Bar(const callback&)将是显而易见的解决方案 Foo::Foo( const callback & cb ) : m_pt
Foo::Foo (const callback &cb)
{
Bar bar;
bar.m_callback = cb;
m_ptr = std::make_shared<Bar>(bar);
//...
}
实现构造函数
Bar::Bar(const callback&)
将是显而易见的解决方案
Foo::Foo( const callback & cb ) :
m_ptr( std::make_shared<Bar>( cb ) )
{
// ...
}
Foo::Foo(常量回调&cb):
m_ptr(标准::使_共享(cb))
{
// ...
}
添加构造函数显式Bar::Bar(常量回调&)
<代码>显式将防止与自动转换相关的错误。然后您可以像这样初始化共享\u ptr
:
Foo::Foo(const callback& cb)
: m_ptr(std::make_shared<Bar>(cb))
Foo::Foo(常量回调&cb)
:m_ptr(标准::使_共享(cb))
请参阅
make_shared
文档Bar
是如何声明的?我想您的Bar
应该有一个构造函数来执行回调。我已经用Bar是什么进行了编辑。对不起:)如果您希望Bar
是一个POD类型,那么您可以使用带括号的值列表作为初始值设定项。另一种将Bar
保持为POD类型的C++03方法是使用构造函数定义派生类。std::make_shared(Bar)
实际调用(隐式定义的)复制构造函数,将Bar
实例作为成员并调用Bar.m_callback=cb有什么不对代码>在构造函数中?抱歉,DevSolar。。我忘了说酒吧是个建筑。问题:edited@waas1919:您也可以为struct
编写构造函数,您知道。。。(在这一点上,struct
和class
之间唯一的区别是默认的可见性--class
的private
,struct
的public
)如果您需要保持Bar
一个POD类型,Alf和Piotr的注释可以选择。
Foo::Foo( const callback & cb ) :
m_ptr( std::make_shared<Bar>( cb ) )
{
// ...
}
Foo::Foo(const callback& cb)
: m_ptr(std::make_shared<Bar>(cb))