Objekte instanziieren: „neu“ vs. nicht „neu“
Welche funktionalen Unterschiede bestehen zwischen den folgenden Zeilen, abgesehen von der Speicherzuweisung? Code?
Time t (12, 0, 0); //t is a Time object Time* t = new Time(12, 0, 0);//t is a pointer to a dynamically allocated Time object
Nicht „neu“ Instanziierung
Die erste Zeile, Time t (12, 0, 0);, erstellt eine Variable t vom Typ Time im lokalen Bereich. Diese Variable wird normalerweise auf dem Stapel zugewiesen und am Ende ihres Gültigkeitsbereichs zerstört.
'neue' Instanziierung
Im Gegensatz dazu ist die zweite Zeile Time* t = new Time(12, 0, 0);, reserviert einen Speicherblock auf dem Heap (normalerweise) über die Funktionen ::operator new() oder Time::operator new(). Dieser Speicherblock wird dann mit dem Time::Time()-Konstruktor initialisiert, wobei die Adresse des neu zugewiesenen Speichers als dieser Zeiger festgelegt wird. Der Zeiger auf den zugewiesenen Speicher wird in der Variablen t gespeichert.
Andere Unterschiede
Während der Hauptunterschied in der Speicherzuweisung liegt, gibt es noch einige andere subtile Unterschiede:
Das obige ist der detaillierte Inhalt vonInstanziierung von „neuen' vs. nicht „neuen' Objekten: Was sind die wichtigsten funktionalen Unterschiede?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!