Ich brauche Zeiger der Instanzen einer Klasse zu erstellen, und das Programm weiß nicht zur Kompilierzeit, wie viele Zeiger ich erstellen werde. Zum Löschen dachte ich darüber nach, die Zeiger in einem Vektor zu speichern und dann einzeln zu löschen. Würde die Verwendung von Smart Pointers einen saubereren Weg zu gehen? Und wenn man nicht intelligente Zeiger verwenden möchte, würde diese Verwendung von Vektor als sauber angesehen werden?Löschen von Vektor von Zeigern
Mindestcode:
#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;
}
}
Brauchen Sie wirklich einen Behälter mit Zeigern? Können Sie Ihre 'Foo' Objekte nicht als Werte speichern (' std :: vector ')? Wäre es nicht auch klarer, wenn 'createFooVector' einen neuen Vektor zurückgibt, anstatt den als Argument angegebenen zu modifizieren? –
@LucTourail Ich benutze Zeiger aus diesem Grund: http://stackoverflow.com/questions/15471193/vector-of-virtual-class-are-pointers-the-clean-way-to-go ... dies konnte nicht in dem Code gesehen werden, den ich hier aber zeige, versucht, es minimal zu halten – Vince