Зачем вообще использовать указатели, когда можно вернуть ссылку?
Foo& B::getFoo() {
vec.push_back(Foo());
return vec.back();
}
Обратите внимание, что ссылки, указатели и итераторы на содержимое vector
становятся недействительными, если происходит перераспределение.
Также общедоступность данных членов (например, vec
здесь) не является хорошей практикой - лучше предоставлять методы доступа для вашего класса по мере необходимости.