Wenn eine Klasse wie folgt deklariert ist:
%Vor%Und es könnte so gemacht werden:
%Vor% Wie wird eine Klasse auf dem Heap zugewiesen, wie wenn ich MyClass * Mine = new MyClass();
mache
Ordnet der allozierte Speicher auch die 250 Bytes im zweiten Beispiel zusammen mit der Klasseninstanziierung zu? Und wird das Mitglied für die gesamte Lebensdauer des MyClass-Objekts gültig sein?
Was das erste Beispiel angeht, ist es praktisch, Klassenmitglieder auf Heap zuzuordnen?
Früher Hinweis: Verwenden Sie std::string
anstelle eines Heap zugewiesenen char [].
Weist der allozierte Speicher auch die 250 Bytes im zweiten Beispiel zusammen mit der Klasseninstanziierung zu?
Es wird gehäuft im Konstruktor zugewiesen, genauso wie in einem Stapel, der MyClass zugewiesen ist. Es hängt davon ab, was Sie mit "zusammen mit" meinen, es wird nicht unbedingt zusammen zugeordnet.
Und wird das Mitglied für die gesamte Lebensdauer des MyClass-Objekts gültig sein?
Ja.
Wie ist es für das erste Beispiel praktisch, Klassenmitglieder auf Heap zuzuordnen?
Ja, in bestimmten Fällen. Manchmal möchten Sie die Includes aus der Header-Datei minimieren, und manchmal verwenden Sie eine Factory-Funktion, um das Member zu erstellen. Normalerweise gehe ich jedoch mit einem einfachen Nicht-Zeiger-Mitglied.
Wenn Sie new
aufrufen, wird es vom Heap zugewiesen, andernfalls wird es vom Stack zugewiesen (wir ignorieren malloc
und seine Art).
In Ihrem ersten Beispiel ist in beiden Fällen Platz zugewiesen: 4 Byte im Stapel für die Instanz von MyClass (32-Bit-Zeiger vorausgesetzt) und 250 Byte im Heap für den Puffer, der MyMember zugewiesen ist.
Im zweiten Beispiel werden 250 Bytes auf dem Stack für die Instanz von MyClass reserviert. In diesem Fall wird MyMember als Offset in die Instanz behandelt.
Tags und Links c++ stack memory-management heap