[英]Copy constructor initialize a reference member in initialization list causes dangling pointer
[英]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.