#include <iostream>
#include <memory>
struct Bar
{
int m_bar;
int &ref_bar;
Bar(int bar_, int g) : 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,10)) ) // prints 23 23, Wrong!
//Foo() : m_foo( new Bar(23,10) ) // prints 23 12, Correct!
//Foo() : m_foo( std::make_shared<Bar>(23,10) ) // prints 23 12, FIXED!
{
m_foo->print();
m_foo->ref_bar = 12;
m_foo->print();
}
};
int main()
{
Foo f;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKCnN0cnVjdCBCYXIKewoJaW50IG1fYmFyOwoJaW50ICZyZWZfYmFyOwoJCglCYXIoaW50IGJhcl8sIGludCBnKSA6IG1fYmFyKGJhcl8pLHJlZl9iYXIobV9iYXIpCgl7O30KCQoJdm9pZCBwcmludCgpCgl7CgkJc3RkOjpjb3V0PDwgIm1fYmFyID0gIjw8bV9iYXI8PHN0ZDo6ZW5kbDsKCX0KfTsKCgpzdHJ1Y3QgRm9vCnsKCXN0ZDo6c2hhcmVkX3B0cjxCYXI+IG1fZm9vOwoJCglGb28oKSA6IG1fZm9vKCBzdGQ6Om1ha2Vfc2hhcmVkPEJhcj4oQmFyKDIzLDEwKSkgKQkJLy8gcHJpbnRzIDIzIDIzLCBXcm9uZyEKCS8vRm9vKCkgOiBtX2ZvbyggbmV3IEJhcigyMywxMCkgKQkJCQkJCS8vIHByaW50cyAyMyAxMiwgQ29ycmVjdCEKCS8vRm9vKCkgOiBtX2Zvbyggc3RkOjptYWtlX3NoYXJlZDxCYXI+KDIzLDEwKSApCQkvLyBwcmludHMgMjMgMTIsIEZJWEVEIQoJewoJCW1fZm9vLT5wcmludCgpOwoJCW1fZm9vLT5yZWZfYmFyID0gMTI7CgkJbV9mb28tPnByaW50KCk7Cgl9Cn07CgoKaW50IG1haW4oKQp7CglGb28gZjsKfQoKCgoKCgo=