Heim > Backend-Entwicklung > C++ > Instanziierung von „neuen' vs. nicht „neuen' Objekten: Was sind die wichtigsten funktionalen Unterschiede?

Instanziierung von „neuen' vs. nicht „neuen' Objekten: Was sind die wichtigsten funktionalen Unterschiede?

Mary-Kate Olsen
Freigeben: 2024-12-06 22:41:12
Original
752 Leute haben es durchsucht

`new` vs. Non-`new` Object Instantiation: What are the Key Functional Differences?

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
Nach dem Login kopieren

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:

  • Lebensdauer: Nicht „neue“ Objekte haben eine automatische Speicherdauer, was bedeutet, dass sie automatisch zerstört werden, wenn ihr Gültigkeitsbereich endet. „Neue“ Objekte hingegen haben eine dynamische Speicherdauer und müssen explizit gelöscht werden, um ihren Speicher zurückzugewinnen.
  • Bereich: Nicht „neue“ Objekte werden definiert und existieren innerhalb ihres lokalen Bereichs. „Neue“ Objekte werden außerhalb des Programmstapels zugewiesen und sind nicht auf einen bestimmten Bereich beschränkt.
  • Eigentum: Der Speicher für „neue“ Objekte muss explizit verwaltet werden und die zugehörigen Zeiger müssen sicher dereferenziert werden. Nicht „neue“ Objekte werden automatisch vom Compiler verwaltet, sodass keine explizite Speicherbereinigung erforderlich ist.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage