Ich verwende C++ erst seit kurzem und habe mich über die new
Stichwort. Sollte ich es einfach verwenden oder nicht?
-
Mit dem
new
Stichwort...MyClass* myClass = new MyClass(); myClass->MyField = "Hello world!";
-
Ohne die
new
Stichwort...MyClass myClass; myClass.MyField = "Hello world!";
Aus der Perspektive der Implementierung scheinen sie sich nicht so sehr zu unterscheiden (aber ich bin sicher, dass sie es tun)... Allerdings ist meine primäre Sprache C#, und natürlich die erste Methode ist, was ich gewohnt bin.
Die Schwierigkeit scheint darin zu bestehen, dass Methode 1 mit den Standard-C++-Klassen schwieriger zu verwenden ist.
Welche Methode sollte ich anwenden?
Aktualisierung 1:
Ich habe vor kurzem die new
Schlüsselwort für Haufen Speicher (oder freies Lager ) für ein großes Array, das den Anwendungsbereich verlässt (d.h. von einer Funktion zurückgegeben wird). Während ich zuvor den Stack verwendet hatte, was dazu führte, dass die Hälfte der Elemente außerhalb des Bereichs beschädigt wurde, konnte ich durch den Wechsel zur Heap-Nutzung sicherstellen, dass die Elemente intakt waren. Juhu!
Update 2:
Ein Freund von mir hat mir kürzlich erzählt, dass es eine einfache Regel für die Verwendung der new
Schlüsselwort; jedes Mal, wenn Sie new
, Typ delete
.
Foobar *foobar = new Foobar();
delete foobar; // TODO: Move this to the right place.
Dies hilft, Speicherlecks zu vermeiden, da Sie das Löschen immer irgendwo unterbringen müssen (z. B. beim Ausschneiden und Einfügen in einen Destruktor oder anderweitig).