#include <iostream>
#include <memory>
class Interface
{
public:
virtual ~Interface()
{
std::cout << __func__ << std::endl;
}
virtual void Do() = 0;
};
class Real : public Interface
{
public:
void Do() final
{
std::cout << "DO" << std::endl;
}
~Real()
{
std::cout << __func__ << std::endl;
}
};
int main() {
std::unique_ptr<Interface> ptr;
Real* realPtr = new Real();
ptr = std::unique_ptr<Interface>(realPtr);
ptr.reset(new Real());
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKY2xhc3MgSW50ZXJmYWNlCnsKCXB1YmxpYzoKCQl2aXJ0dWFsIH5JbnRlcmZhY2UoKQoJCXsKCQkJc3RkOjpjb3V0IDw8IF9fZnVuY19fIDw8IHN0ZDo6ZW5kbDsKCQl9CgkJdmlydHVhbCB2b2lkIERvKCkgPSAwOwp9OwoKY2xhc3MgUmVhbCA6IHB1YmxpYyBJbnRlcmZhY2UKewpwdWJsaWM6Cgl2b2lkIERvKCkgZmluYWwKCXsKCQlzdGQ6OmNvdXQgPDwgIkRPIiA8PCBzdGQ6OmVuZGw7Cgl9CgkKCX5SZWFsKCkKCXsKCQlzdGQ6OmNvdXQgPDwgX19mdW5jX18gPDwgc3RkOjplbmRsOwoJfQp9OwoKaW50IG1haW4oKSB7CgoJc3RkOjp1bmlxdWVfcHRyPEludGVyZmFjZT4gcHRyOwoKCVJlYWwqIHJlYWxQdHIgPSBuZXcgUmVhbCgpOwoJcHRyID0gc3RkOjp1bmlxdWVfcHRyPEludGVyZmFjZT4ocmVhbFB0cik7CgkKCXB0ci5yZXNldChuZXcgUmVhbCgpKTsKCglyZXR1cm4gMDsKfQ==