В некоторых других сообщениях отмечалось, что вам лучше использовать умные указатели вместо указателей.Если вам по какой-либо причине необходимо использовать указатель, сначала вы должны удалить их в цикле.
for ( std::vector<B*>::iterator it = vect.begin(); it != vect.end(); ++it)
delete (*it);
vect.clear();
edit: если ваша программа вызывает ошибку в деструкторе, значит, ваш код неверен.Возможно, вы помещаете элемент стека по адресу в векторе, но чтобы удалить объект, он должен быть в куче.
#include <iostream>
#include <vector>
#include <string>
class data {
public:
std::string d;
data(std::string _d) : d(_d) { }
};
class container {
public:
std::vector<data*> c;
container() { c.clear(); }
void add (data *d) { c.push_back(d); }
~container() {
for (std::vector<data*>::iterator it = c.begin(); it != c.end(); ++it)
delete (*it);
c.clear();
}
};
int main (int argc, char* argv[]) {
typedef std::vector<std::string> sVec;
typedef sVec::iterator sVecIter;
std::vector<std::string> cmd (argv+1, argv+argc);
{
container k;
for (sVecIter it = cmd.begin(); it != cmd.end(); ++it)
k.add(new data((*it)));
}
return 0;
}
Это работает без проблем.