Anhand Ihrer Frage ist es schwer zu sagen, was die Signatur von maps
ist. Ich nehme an, Sie wollen die delete[]
denn Sie haben auch new[]
. Bedeutet das, dass die Mitglieder Ihres Vektors selbst eine Sammlung ist? angenommen, es ist, dann haben Sie etwas wie dieses:
class Building {
public:
typedef int* maps_t;
private:
std::vector<maps_t> maps;
public:
Building();
~Building();
};
Building::Building(size_t num_maps) {
for(;num_maps; --num_maps)
{
maps.push_back(new Building::maps_t[10]);
}
}
In diesem Fall ist Ihr Destruktor fast richtig; Sie müssen nur die &maps[i]
a maps[i]
.
Building::~Building() {
int i;
for (i=0; i<maps.size(); i++) {
delete[] maps[i];
}
}
Aber in C++ wollen wir die Dinge nur selten so machen. Zum einen, wenn man nicht gerade versucht, etwas zu implementieren wie std::vector
wollen Sie nur selten verwenden new[]
o delete[]
ausdrücklich. Sie können z. B. Folgendes verwenden std::vector
. In diesem Fall brauchen Sie keine explizite Speicherverwaltung durchzuführen. Ihre Klasse wird wie folgt aussehen:
class Building {
public:
typedef std::vector<int> maps_t;
private:
std::vector<maps_t> maps;
public:
Building();
};
Building::Building(size_t num_maps) {
for(;num_maps; --num_maps)
{
maps.push_back(Building::maps_t(10));
}
}
In diesem Fall gibt es keinen benutzerdefinierten Destruktor, da std::vector
verwaltet seinen eigenen Speicher bereits recht gut.