360 Stimmen

Wann sollte ich das Schlüsselwort new in C++ verwenden?

Ich verwende C++ erst seit kurzem und habe mich über die new Stichwort. Sollte ich es einfach verwenden oder nicht?

  1. Mit dem new Stichwort...

    MyClass* myClass = new MyClass();
    myClass->MyField = "Hello world!";
  2. 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).

0voto

greyfade Punkte 24134

Die zweite Methode erzeugt die Instanz auf dem Stack, zusammen mit Dingen wie etwas, das als int und die Liste der Parameter, die an die Funktion übergeben werden.

Die erste Methode schafft Platz für eine Zeiger auf dem Stack, den Sie auf den Speicherplatz gesetzt haben, an dem eine neue MyClass auf dem Heap - oder dem freien Speicher - zugewiesen worden ist.

Die erste Methode erfordert außerdem, dass Sie delete was Sie mit new Bei der zweiten Methode hingegen wird die Klasse automatisch zerstört und freigegeben, wenn sie aus dem Anwendungsbereich herausfällt (in der Regel die nächste schließende Klammer).

-3voto

RAGNO Punkte 499

Die kurze Antwort lautet: Ja, das Schlüsselwort "new" ist unglaublich wichtig, denn wenn Sie es verwenden, werden die Objektdaten auf dem Heap und nicht auf dem Stack gespeichert, was sehr wichtig ist!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X