Instanziierungsunterschiede: neu vs. nicht neu
Diese Frage untersucht die funktionalen Unterschiede zwischen der Instanziierung eines Objekts mit dem neuen Operator und der Instanziierung desselben Ohne neu.
Nicht neu Instanziierung
Time t(12, 0, 0); // t is a Time object
Diese Instanziierung erstellt ein Zeitobjekt mit dem Namen t, das sich auf dem Stapel befindet (in den meisten Implementierungen). Es behält seine Existenz innerhalb des aktuellen Bereichs.
neue Instanziierung
Time *t = new Time(12, 0, 0); // t is a pointer to a dynamically allocated Time object
Diese Instanziierung reserviert dynamisch Speicher mithilfe des Operators new() und ruft dann den Konstruktor Time( ). Die Adresse des zugewiesenen Speicherblocks wird in t gespeichert. Das Time-Objekt befindet sich (normalerweise) auf dem Heap. Später im Programm muss t gelöscht werden, um den zugewiesenen Speicher freizugeben und Speicherlecks zu verhindern.
Funktionelle Unterschiede
Neben dem offensichtlichen Unterschied in der Speicherverwaltung gibt es keine wesentliche funktionale Unterschiede zwischen den beiden Instanziierungen. Beide Methoden erstellen Instanzen der Time-Klasse mit den angegebenen Parametern.
Hinweis
Die Begriffe „Stack“ und „Heap“ werden im Allgemeinen verwendet, um die Speicherorte von anzugeben Stack-zugewiesene bzw. Heap-zugewiesene Objekte. Der C-Standard schreibt diese Unterscheidungen jedoch nicht basierend auf Speicherorten vor. Stattdessen werden Objekte anhand ihrer Speicherdauer kategorisiert, was möglicherweise mit den herkömmlichen Konzepten von Stapel und Heap übereinstimmt oder auch nicht.
Das obige ist der detaillierte Inhalt vonNeue vs. nicht neue Instanziierung in C: Was sind die Hauptunterschiede?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!