#include <functional>
#include <memory>
#include <iostream>
using namespace std;
struct Data {
int some_data;
shared_ptr<unique_ptr<Data>> mdata;
Data() {
unique_ptr<Data> udata(this);
mdata = make_shared<unique_ptr<Data>>(std::move(udata));
}
~Data() {
mdata->release();
}
};
struct Yoba {
shared_ptr<unique_ptr<Data>> mdata;
};
int main(void) {
Yoba yoba;
{
Data data;
yoba.mdata = data.mdata;
std::cout << yoba.mdata->get() << std::endl;
}
std::cout << yoba.mdata->get() << std::endl;
return 0;
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxtZW1vcnk+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgRGF0YSB7CglpbnQgc29tZV9kYXRhOwoJc2hhcmVkX3B0cjx1bmlxdWVfcHRyPERhdGE+PiBtZGF0YTsKICAgIAogICAgRGF0YSgpIHsKICAgIAl1bmlxdWVfcHRyPERhdGE+IHVkYXRhKHRoaXMpOwogICAgICAgIG1kYXRhID0gbWFrZV9zaGFyZWQ8dW5pcXVlX3B0cjxEYXRhPj4oc3RkOjptb3ZlKHVkYXRhKSk7CiAgICB9CgogICB+RGF0YSgpIHsKICAgICAgICBtZGF0YS0+cmVsZWFzZSgpOwogICAgfQoKfTsKCnN0cnVjdCBZb2JhIHsKCXNoYXJlZF9wdHI8dW5pcXVlX3B0cjxEYXRhPj4gbWRhdGE7Cn07CgoKaW50IG1haW4odm9pZCkgewoJWW9iYSB5b2JhOwogICAgewogICAgICAgICAgIERhdGEgZGF0YTsKCSAgICAgICB5b2JhLm1kYXRhID0gZGF0YS5tZGF0YTsKICAgICAgICAgICBzdGQ6OmNvdXQgPDwgeW9iYS5tZGF0YS0+Z2V0KCkgPDwgc3RkOjplbmRsOyAgICAgICAgCiAgICB9CiAgICBzdGQ6OmNvdXQgPDwgeW9iYS5tZGF0YS0+Z2V0KCkgPDwgc3RkOjplbmRsOwoJcmV0dXJuIDA7Cn0=