Speicher freigabe komplexer, verschachtelter Elemente.
-
Hi!
struct data { vector <string> a; vector <string> b; }; data* data_factory() { data* pdata = new data; pdata->a.push_back("a1"); pdata->b.push_back("b1"); return pdata; } int main ( int argc, char* argv[] ) { vector <data*> vd; data* pd = data_factory(); vd.push_back(pd); // ... // Wird mit dieser Zeile auch der Speicherplatz von // vector <string> a und vector <string> b in der Struktur // freigegeben? vd.clear(); //...Ich bin jahrelanges C programmieren gewöhnt, da muss man den allokierten Speicherplatz selbst vewalten; daher mögen euch meine Fragen eigenartig erscheinen, aber:
Sorgt beim Aufruf von vc.clear() das Compilersystem automatisch für die generierung von Code, sodass vector <string> a und vector <string> b geleert werden?
Gruß,
m.
-
vd.clear() entfernt nur die Elemente as dem Vektor. Mit normalen Objekten würden diese auch zerstört. Da du aber Pointer drinnen hast, leben die danach weiter. Du musst also über alle Elemente deines Vectors iterieren und jedes Element mittels delete löschen. Dann werden aber auch automatisch die strings aus data gelöscht.
-
Die Vektoren verwalten ihre Elemente. In Deinem Fall sind das u.a. Zeiger. Die Zeiger werden auch ordnungsgemäß zerstört. Das, worauf sie Zeigern, ist allerdings Dein Bier. Die Antwort ist also: Nein.
-
Ok, supi, vielen Dank!

