B
Meyer schrieb:
Ich habe eine Klasse CKlasse. Wenn ich nun ein Objekt mit
CKlasse objekt;
erstelle, befindet es sich auf dem Stack.
Richtig.
Bei
CKlasse p_objekt=new CKlasse;
befindet es sich auf dem Heap.
Du meinst sicher *p_objekt. Aufpassen: Das mit new erzeugte Objekt liegt auf dem Heap, p_objekt liegt auf dem Stack (sorry fuer die uebermaessige Pedanterie.)
Aber was ist, wenn ich noch eine Struktur
struct STRUKTUR
{
CKlasse objekt;
}
habe und das ganze dann so deklariere:
STRUKTUR p_strukturvariable=new STRUKTUR;
Die Strukturvariable wird ja jetzt dynamisch auf dem Heap erstellt, aber das Klassenobjekt ist innerhalb der Struktur wie ein statisches Objekt auf dem Stack deklariert. Wo befindet sich jetzt also das Objekt der Klasse? Auf dem Heap oder auf dem Stack?
Geographisch gesehen liegt das Objekt auch auf dem Heap. Und hier kommen wir in Konflikte mit diesen seltsamen Begriffen: Wenn wir sagen, ein Objekt liegt auf dem Stack oder Heap, meinen wir eigentlich nicht, wo genau das im Speicher liegt, sondern welche Sichtbarkeit und Lebensdauer es hat. Man sagt halt "Stack" zu automatischen Objekten, also solche, die am Ende ihres Gueltigkeitsbereiches automatisch zerstoert werden, und man sagt "Heap", wenn man meint, dass sie mit delete manuell zerstoert werden. Wenn das zu ungenau wird, muss man explizit werden.