Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在构造函数的初始化列表中初始化共享指针?_C++_C++11_Constructor_Shared Ptr - Fatal编程技术网

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))