#include <iostream>
#include <memory>
#include <vector>
class base
{
public:
virtual void foo() const
{
std::cout << "base!\n";
}
};
class derived : public base
{
public:
void foo() const final override
{
std::cout << "derived!\n";
}
};
int main()
{
std::vector<std::unique_ptr<base>> bases;
bases.push_back(std::unique_ptr<derived>(new derived));
// bases.push_back(std::make_unique<derived>()); // <- falls make_unique verfügbar ist
bases.front()->foo();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8dmVjdG9yPgoKY2xhc3MgYmFzZQp7CnB1YmxpYzoKCXZpcnR1YWwgdm9pZCBmb28oKSBjb25zdAoJewoJCXN0ZDo6Y291dCA8PCAiYmFzZSFcbiI7Cgl9Cn07CgpjbGFzcyBkZXJpdmVkIDogcHVibGljIGJhc2UKewpwdWJsaWM6Cgl2b2lkIGZvbygpIGNvbnN0IGZpbmFsIG92ZXJyaWRlCgl7CgkJc3RkOjpjb3V0IDw8ICJkZXJpdmVkIVxuIjsKCX0KfTsKCmludCBtYWluKCkKewoJc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPGJhc2U+PiBiYXNlczsKCWJhc2VzLnB1c2hfYmFjayhzdGQ6OnVuaXF1ZV9wdHI8ZGVyaXZlZD4obmV3IGRlcml2ZWQpKTsKCS8vIGJhc2VzLnB1c2hfYmFjayhzdGQ6Om1ha2VfdW5pcXVlPGRlcml2ZWQ+KCkpOyAvLyA8LSBmYWxscyBtYWtlX3VuaXF1ZSB2ZXJmw7xnYmFyIGlzdAoJYmFzZXMuZnJvbnQoKS0+Zm9vKCk7Cn0=