anakin87
2013-02-26, 11:42:12
Hallo,
ich beschäftige mich gerade mit C++, Polymorphismus und dem Speichermanagement. Da ich aus der C#-Ecke komme und die Speicherverwaltung ungewohnt finde, wollte ich einen kleinen Helper basteln der sich für mich darum kümmert.
//kurzum:
//Klasse Fahrzeug (Base)
//Klasse Auto erbt von Fahrzeug
std::list<Fahrzeug*> fList; //sammle alle Objekte um sie am Ende freizugeben
//für jedes Objekt
fList.push_back(fahrzeugObjekt);
//oder auch
fList.push_back(autoObjekt);
for(Fahrzeug* item:flist)
{delete item;}
So laut Polymorphismus kann ich auch Auto* in die Liste speichern. Nur sizeof(fahrzeug) ist 12 und sizeof(auto) ist 44; kann das Programm dann den Speicher richtig freigeben wenn er alle Auto* Objekte als Fahrzeug* behandelt?
Den einzigen Unterschied den ich eben feststellen konnte ist, dass dann nur der Fahrzeug-Destructor aufgerufen wird, was ja klar ist, da ja in der Liste alles (Fahrzeug*) ist.
Aber ich würde gerne wissen ob er dann 44 Byte oder 12 freigibt? Weil woher weis er dann wie groß das Objekt wirklicht ist....
Beste Grüße
ich beschäftige mich gerade mit C++, Polymorphismus und dem Speichermanagement. Da ich aus der C#-Ecke komme und die Speicherverwaltung ungewohnt finde, wollte ich einen kleinen Helper basteln der sich für mich darum kümmert.
//kurzum:
//Klasse Fahrzeug (Base)
//Klasse Auto erbt von Fahrzeug
std::list<Fahrzeug*> fList; //sammle alle Objekte um sie am Ende freizugeben
//für jedes Objekt
fList.push_back(fahrzeugObjekt);
//oder auch
fList.push_back(autoObjekt);
for(Fahrzeug* item:flist)
{delete item;}
So laut Polymorphismus kann ich auch Auto* in die Liste speichern. Nur sizeof(fahrzeug) ist 12 und sizeof(auto) ist 44; kann das Programm dann den Speicher richtig freigeben wenn er alle Auto* Objekte als Fahrzeug* behandelt?
Den einzigen Unterschied den ich eben feststellen konnte ist, dass dann nur der Fahrzeug-Destructor aufgerufen wird, was ja klar ist, da ja in der Liste alles (Fahrzeug*) ist.
Aber ich würde gerne wissen ob er dann 44 Byte oder 12 freigibt? Weil woher weis er dann wie groß das Objekt wirklicht ist....
Beste Grüße