我不确定标题,所以如果不是很清楚,请提前道歉。
下面的例子说明了我的问题。
当我使用new从成员初始化列表中初始化 shared_ptr 时,当我为 &ref_bar 分配一个值时,一切似乎都工作正常。但是,当我使用首选方式make_shared尝试相同的操作时,它不起作用。
您能否解释一下发生这种情况的幕后情况?
请忽略以下示例中的“坏”编码。我创建了这个来说明我的问题。我对shared_ptr 的重要性感兴趣。
#include <iostream>
#include <memory>
class Bar
{
int m_bar;
public:
int &ref_bar;
Bar(int bar_) : m_bar(bar_),ref_bar(m_bar)
{;}
void print()
{
std::cout<< "m_bar = "<<m_bar<<std::endl;
}
};
struct Foo
{
std::shared_ptr<Bar> m_foo;
Foo() : m_foo( std::make_shared<Bar>(Bar(23)) ) // Ex.1
//Foo() : m_foo( new Bar(23) ) // Ex.2
{
m_foo->print();
m_foo->ref_bar = 12;
m_foo->print();
}
};
int main()
{
Foo f;
}
结果是:
Ex.1 >> 23,23 Wrong.
Ex.2 >> 23,12 Ok.
这是 ideone 的链接:http: //ideone.com/xluYQ9