Решите это, не используя ужасную идею хранения сырых указателей в контейнере.Вместо этого используйте контейнер интеллектуальных указателей:
#include <memory>
#include <vector>
typedef std::shared_ptr<Foo> FooPtr;
std::vector<FooPtr> v;
FooPtr b(new Bar()); // #1
v.push_back(b);
v.push_back(b);
v.push_back(b);
// C++0x: even better method:
auto c = std::make_shared<Bar>(); // #2
v.push_back(c);
v.push_back(c);
v.push_back(std::make_shared<Bar>()); // #3
// Three distinct allocations of a Bar object have happened, #1, #2, and #3.
// No explicit deletions!
Если у вас нет C ++ 0x, используйте библиотеку TR1:
#include <tr1/memory>
typedef std::tr1::shared_ptr<Foo> FooPtr;
(У вас нет make_shared
в этом случае, потому что это новый трюк с использованием ссылок и пересылки rvalue.)