Objekte instanziieren: Mit oder ohne New
Beim Erstellen von Objekten in C können Programmierer entweder den „new“-Operator verwenden oder sie direkt instanziieren ohne es. Während beide Ansätze Objekte erstellen, unterscheiden sie sich in einigen wichtigen Aspekten.
Ohne Neu
Durch die Instanziierung eines Objekts ohne „neu“ wird direkt Speicher dafür im aktuellen Bereich reserviert. Dies geschieht normalerweise auf dem Stapel und führt zu einem Objekt mit automatischer Lebensdauer. Das Objekt wird innerhalb des definierten Bereichs automatisch erstellt und zerstört.
Zum Beispiel:
Time t(12, 0, 0); // t is a Time object
Im obigen Code wird das „Zeit“-Objekt „t“ auf dem Stapel erstellt und seine Lebensdauer ist an den aktuellen Bereich gebunden.
Mit New
Durch die Verwendung von „new“ zum Instanziieren eines Objekts wird ihm dynamisch Speicher auf dem Heap zugewiesen. Dadurch kann das Objekt explizit erstellt und zerstört werden, wenn seine Lebensdauer endet. Der Zeiger „t“ speichert die Heap-Adresse des Objekts.
Zum Beispiel:
Time* t = new Time(12, 0, 0); // t is a pointer to a dynamically allocated Time object
Hier wird dem Zeiger „t“ die Heap-Adresse des neu erstellten „Time“-Objekts zugewiesen. Die Lebensdauer des Objekts ist unabhängig vom Bereich und bleibt bestehen, bis der „Löschen“-Operator verwendet wird, um seinen Speicher freizugeben.
Hauptunterschiede
Es ist wichtig zu beachten, dass diese Unterschiede implementierungsspezifisch sind, da der C-Standard das Stack- und Heap-Verhalten nicht explizit definiert. In den meisten praktischen Implementierungen wird jedoch Stapelspeicher für automatische Objekte und Heapspeicher für dynamische Objekte verwendet.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3