c ++: может вектор <Base> содержать объекты типа Derived?

Название в значительной степени говорит обо всем. В принципе, законно ли это делать:

class Base {
    //stuff
}

class Derived: public Base {
    //more stuff
}

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

Основываясь на других сообщениях, которые я видел, следующее хорошо, но я не хочу использовать указатели в этом случае, потому что труднее сделать его безопасным для потоков.

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

Ответы на вопрос(3)

Ваш ответ на вопрос