#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;
}