Я не был уверен в названии, поэтому извиняюсь заранее, если это не очень понятно.Доступ к ссылочной переменной из shared_ptr
Приведенный ниже пример иллюстрирует мою проблему.
Когда я использую новый инициализировать 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