#include <iostream>
#include <memory>
class A
{
public:
A() : p(std::make_shared<int>()) {}
int value() const { return *p; }
void set_value(int value) { *p = value; }
private:
std::shared_ptr<int> p;
};
int main()
{
A a(a);
a.set_value(42); // Oops!!!!!!!!
std::cout << a.value() << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKY2xhc3MgQQp7CnB1YmxpYzoKCiAgQSgpIDogcChzdGQ6Om1ha2Vfc2hhcmVkPGludD4oKSkge30KCiAgaW50IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gKnA7IH0KICB2b2lkIHNldF92YWx1ZShpbnQgdmFsdWUpIHsgKnAgPSB2YWx1ZTsgfQoKcHJpdmF0ZToKICAgc3RkOjpzaGFyZWRfcHRyPGludD4gcDsKfTsKCmludCBtYWluKCkKewogICBBIGEoYSk7CiAgIGEuc2V0X3ZhbHVlKDQyKTsgIC8vIE9vcHMhISEhISEhIQogICBzdGQ6OmNvdXQgPDwgYS52YWx1ZSgpIDw8IHN0ZDo6ZW5kbDsKfQ==