簡體   English   中英

如何在構造函數的初始化列表中初始化共享指針?

[英]How to initialize a shared pointer in the initialization list of a constructor?

如何在構造函數的初始化列表中初始化共享指針?

我有這個:

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.
};

添加構造函數explicit Bar::Bar(const callback&) explicit將防止與自動轉換相關的錯誤。 然后你可以像這樣初始化一個shared_ptr<Bar>

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

請參閱此處make_shared文檔。

實現構造函數Bar::Bar( const callback & )將是顯而易見的解決方案......?!?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM