Instanziierung von Objekten verstehen: Mit oder ohne „Neu“
Beim Erstellen von Objekten in der Programmierung ergeben sich zwei Ansätze: die Verwendung des „Neuen“ Schlüsselwort oder Instanziierung ohne es. Über die dynamische Speicherzuweisung hinaus stellt sich eine entscheidende Frage: Gibt es einen funktionalen Unterschied zwischen diesen beiden Methoden?
Lassen Sie uns die folgenden Codeausschnitte untersuchen:
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
In der ersten Zeile steht das 't '-Variable wird lokal erstellt, normalerweise auf dem Stapel. Es enthält eine Instanz des „Time“-Objekts, die zerstört wird, sobald sein Gültigkeitsbereich endet.
Im Gegensatz dazu verwendet die zweite Zeile den „new“-Operator, um Speicher dynamisch zuzuweisen und das „Time“-Objekt innerhalb dieses Blocks zu initialisieren. Folglich speichert die Variable „t“ die Adresse des dynamisch zugewiesenen Speichers anstelle des Objekts selbst. Diese dynamische Zuweisung erfolgt standardmäßig auf dem Heap und erfordert die Verwendung von „Löschen“, um den zugewiesenen Speicher später freizugeben.
Der funktionale Unterschied liegt also im Umfang und der Lebensdauer des erstellten Objekts. Im ersten Fall ist das Objekt lokal und wird am Ende seines Gültigkeitsbereichs zerstört, während im zweiten Fall das Objekt bestehen bleibt, bis es explizit gelöscht wird.
Es ist wichtig zu beachten, dass die Lokalisierung von Variablen auf dem Stapeln und dynamische Objekte auf dem Heap sind eine gängige Implementierungspraxis. Der C-Standard definiert diese Objekte jedoch ausschließlich anhand ihrer Lebensdauer, nicht anhand ihres physischen Speicherorts.
Das obige ist der detaillierte Inhalt vonObjektinstanziierung in C: „neues' Schlüsselwort vs. direkte Initialisierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!