Существует библиотека Boost.PointerContainer , которая может вам здесь чрезвычайно помочь.
Во-первых: он заботится об управлении памятью, поэтому вы не забудете релиз, на который указала память.
Второе: он предоставляет интерфейс с «разыменованием», так что вы можете использовать итераторы без некрасивых патчей (*it)->
.
#include <boost/ptr_container/ptr_vector.hpp>
int main(int argc, char* argv[])
{
boost::ptr_vector<ClassA> vec;
vec.push_back(new DerivedA());
for (boost::ptr_vector<ClassA>::const_iterator it = vec.begin(), end = vec.end();
it != end; ++it)
it->printOutput();
}
С точки зрения внедрения зависимостей вы, возможно, захотите, чтобы printOutput
принял параметр std::ostream&
, чтобы вы могли направить его в любой поток, который вам нужен (по умолчанию он мог бы std::cout
)