Да, вы должны сделать это, чтобы избежать утечки памяти. Лучший способ сделать это - создать вектор общих указателей ( boost , C ++ TR1, C ++ 0x,)
std::vector<std::tr1::shared_ptr<A> > l;
или вектор уникальных указателей (C ++ 0x), если объекты на самом деле не совместно используются между этим контейнером и чем-то еще
std::vector<std::unique_ptr<A>> l;
или использовать буст контейнеры-указатели
boost::ptr_vector<A> l;
PS: Не забывайте, виртуальный деструктор А, согласно @Neil Butterworth!