#include <iostream>
#include <vector>
#include <memory>
struct Base {
    virtual void f() { std::cout << "Base\n"; }
    virtual ~Base(){}
};
struct Derived : Base {
    void f() { std::cout << "Derived\n"; }
};
int main()
{
    std::vector<std::unique_ptr<Base>> v;
    v.emplace_back(new Derived);
    v[0]->f();
}
