#include <memory>
class Base
{
public:
Base() {};
virtual void do_stuff() = 0;
};
class Derived : public Base {
public:
Derived() {}
void do_stuff() { };
};
class Foo
{
public:
Foo() {
mPtr = std::make_shared<Derived>();
}
protected:
std::shared_ptr<Base> mPtr;
};
int main()
{
Foo foo;
}
I2luY2x1ZGUgPG1lbW9yeT4KCmNsYXNzIEJhc2UKewpwdWJsaWM6CiAgQmFzZSgpIHt9OwogIHZpcnR1YWwgdm9pZCBkb19zdHVmZigpID0gMDsKfTsKCmNsYXNzIERlcml2ZWQgOiBwdWJsaWMgQmFzZSB7CnB1YmxpYzoKICBEZXJpdmVkKCkge30KICB2b2lkIGRvX3N0dWZmKCkgeyB9Owp9OwoKCmNsYXNzIEZvbwp7CgpwdWJsaWM6CiAgRm9vKCkgewogICAgbVB0ciA9IHN0ZDo6bWFrZV9zaGFyZWQ8RGVyaXZlZD4oKTsKICB9Cgpwcm90ZWN0ZWQ6CiAgc3RkOjpzaGFyZWRfcHRyPEJhc2U+IG1QdHI7Cn07CgppbnQgbWFpbigpCnsKCUZvbyBmb287Cn0K