#include <iostream>
#include <memory>
using namespace std;
class Engine
{
public:
Engine():pointer_(new int(0)){}
~Engine() {}
const std::shared_ptr<int>& getPointer()const {return pointer_;}
private:
std::shared_ptr<int> pointer_;
};
class Box
{
public:
Box() {}
~Box() {}
void setPointer(std::shared_ptr<int> pointer) {pointer_ = pointer;}
private:
std::shared_ptr<int> pointer_;
};
int main(int argc, char *argv[])
{
Engine *engine = new Engine();
Box *box = new Box();
box->setPointer(engine->getPointer());
delete box;
delete engine;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmNsYXNzIEVuZ2luZQp7CiAgICBwdWJsaWM6CiAgICAgICAgRW5naW5lKCk6cG9pbnRlcl8obmV3IGludCgwKSl7fQogICAgICAgIH5FbmdpbmUoKSB7fQogICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxpbnQ+JiBnZXRQb2ludGVyKCljb25zdCB7cmV0dXJuIHBvaW50ZXJfO30KICAgIHByaXZhdGU6CiAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxpbnQ+ICBwb2ludGVyXzsKfTsKIApjbGFzcyBCb3gKewogICAgcHVibGljOgogICAgICAgIEJveCgpIHt9CiAgICAgICAgfkJveCgpIHt9CiAgICAgICAgdm9pZCBzZXRQb2ludGVyKHN0ZDo6c2hhcmVkX3B0cjxpbnQ+IHBvaW50ZXIpIHtwb2ludGVyXyA9IHBvaW50ZXI7fQogICAgcHJpdmF0ZToKICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8aW50PiAgcG9pbnRlcl87Cn07CiAKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogICAgRW5naW5lICplbmdpbmUgPSBuZXcgRW5naW5lKCk7CiAgICBCb3ggKmJveCA9IG5ldyBCb3goKTsKICAgIGJveC0+c2V0UG9pbnRlcihlbmdpbmUtPmdldFBvaW50ZXIoKSk7CiAKICAgIGRlbGV0ZSBib3g7CiAgICBkZWxldGUgZW5naW5lOwogICAgCiAgICByZXR1cm4gMDsKfQ==