#include <iostream>
#include <string>
#include <memory>
struct Other
{
virtual void print() = 0;
virtual ~Other() = default;
};
struct Base
{
Base(Other *o)
{
o->print();
}
virtual ~Base() = default;
};
struct Derived : Base
{
Derived();
virtual ~Derived();
private:
struct My;
std::unique_ptr<My> my;
My *temp;
};
int main()
{
Derived d;
}
struct Derived::My : Other
{
std::string s = "It works";
virtual void print()
{
std::cout << s << std::endl;
}
};
Derived::Derived()
: Base(temp = new My)
, my(temp)
{
temp = nullptr;
}
Derived::~Derived() = default;
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bWVtb3J5PgoKc3RydWN0IE90aGVyCnsKCXZpcnR1YWwgdm9pZCBwcmludCgpID0gMDsKCXZpcnR1YWwgfk90aGVyKCkgPSBkZWZhdWx0Owp9OwoKc3RydWN0IEJhc2UKewoJQmFzZShPdGhlciAqbykKCXsKCQlvLT5wcmludCgpOwoJfQoJdmlydHVhbCB+QmFzZSgpID0gZGVmYXVsdDsKfTsKc3RydWN0IERlcml2ZWQgOiBCYXNlCnsKCURlcml2ZWQoKTsKCXZpcnR1YWwgfkRlcml2ZWQoKTsKcHJpdmF0ZToKCXN0cnVjdCBNeTsKCXN0ZDo6dW5pcXVlX3B0cjxNeT4gbXk7CglNeSAqdGVtcDsKfTsKCmludCBtYWluKCkKewoJRGVyaXZlZCBkOwp9CgpzdHJ1Y3QgRGVyaXZlZDo6TXkgOiBPdGhlcgp7CglzdGQ6OnN0cmluZyBzID0gIkl0IHdvcmtzIjsKCXZpcnR1YWwgdm9pZCBwcmludCgpCgl7CgkJc3RkOjpjb3V0IDw8IHMgPDwgc3RkOjplbmRsOwoJfQp9OwpEZXJpdmVkOjpEZXJpdmVkKCkKOiBCYXNlKHRlbXAgPSBuZXcgTXkpCiwgbXkodGVtcCkKewoJdGVtcCA9IG51bGxwdHI7Cn0KRGVyaXZlZDo6fkRlcml2ZWQoKSA9IGRlZmF1bHQ7Cg==