c ++: ¿puede el vector <Base> contener objetos de tipo Derivado?

El título lo dice todo. Básicamente, es legal hacer esto:

class Base {
    //stuff
}

class Derived: public Base {
    //more stuff
}

vector<Base> foo;
Derived bar;
foo.push_back(bar);

Basado en otras publicaciones que he visto, lo siguiente está bien, pero no quiero usar punteros en este caso porque es más difícil hacer que el hilo sea seguro.

vector<Base*> foo;
Derived* bar = new Derived;
foo.push_back(bar);

Respuestas a la pregunta(3)

Su respuesta a la pregunta