Мне нужно создать указатели экземпляров класса, и во время компиляции программа не знает, сколько указателей я создам. Для удаления я рассматривал возможность хранения указателей в векторе, а затем их удаление один за другим. Будет ли использование умных указателей более чистым способом? И если кто-то не хочет использовать интеллектуальные указатели, будет ли это использование вектора считаться чистым?Удаление вектора указателей
Минимальный код:
#include <vector>
using namespace std;
class Foo {
public:
Foo();
};
Foo::Foo(){}
void createFooVector(int nb, std::vector<Foo*> &v){
for(int i=0;i<nb;i++){
Foo* f = new Foo();
v.push_back(f);
}
}
int main(int argc, char *argv[]){
std::vector<Foo*> v;
createFooVector(5,v);
while (!v.empty()){
Foo* f = v.back();
v.pop_back();
delete f;
}
}
Вам действительно нужен контейнер указателей? Не можете ли вы сохранить объекты 'Foo' в качестве значений (' std :: vector ')? Кроме того, не было бы яснее, если бы 'createFooVector' вернул новый вектор вместо того, чтобы изменять значение, указанное в качестве аргумента? –
@LucTouraille Я использую указатель по этой причине: http://stackoverflow.com/questions/15471193/vector-of-virtual-class-are-pointers-the-clean-way-to-go ... это не могло я вижу здесь код, который я здесь показываю, пытался сохранить его минимальным – Vince