Правда ли, что когда я закончу с вектором, я должен пройти через него и вызвать delete для каждого указателя?
Ну, вам не нужно делать циклы вручную, вы также можете использовать алгоритм:
#include <vector>
#include <algorithm>
#include <memory>
int main()
{
std::vector<Base*> vec;
vec.push_back(new Derived());
vec.push_back(new Derived());
vec.push_back(new Derived());
// ...
std::for_each(vec.begin(), vec.end(), std::default_delete<Base>());
}
Если у вас нет компилятора C ++ 0x, вы можете использовать boost:
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/construct.hpp>
std::for_each(vec.begin(), vec.end(), boost::lambda::delete_ptr());
Или вы можете написать свой собственный функтор:
struct delete_ptr
{
template <class T>
void operator()(T* p)
{
delete p;
}
};
std::for_each(vec.begin(), vec.end(), delete_ptr());