„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie erstelle ich Objekte und rufe Konstruktoren auf, ohne „new“ in C++ zu verwenden?

Wie erstelle ich Objekte und rufe Konstruktoren auf, ohne „new“ in C++ zu verwenden?

Veröffentlicht am 06.11.2024
Durchsuche:559

How to Create Objects and Invoke Constructors Without Using `new` in C  ?

Konstruktoren und Malloc

Im Gegensatz zu neuen und gelöschten Ausdrücken ruft std::malloc den Konstruktor nicht auf, wenn Speicher für ein Objekt zugewiesen wird. Um ein Objekt zu erstellen und gleichzeitig seinen Konstruktor aufzurufen, ist daher ein alternativer Ansatz erforderlich.

Mögliche Lösungen:

1. Verwendung von new:
Dies ist die primär beabsichtigte Verwendung, da new explizit ein Objekt erstellt und anschließend seinen Konstruktor aufruft.

Beispiel:

A* a = new A();
delete a;

2. Expliziter Konstruktoraufruf (Platzierung neu):
Diese Methode beinhaltet die Zuweisung von Speicher mithilfe von malloc und das anschließende manuelle Aufrufen des Konstruktors mithilfe der Platzierungs-Neu-Syntax.

Beispiel:

A* a = (A*)malloc(sizeof(A));
new (a) A();

a->~A();
free(a);

Es ist wichtig zu beachten, dass die Platzierung new die Verwendung der richtigen Konstruktorüberladung erfordert und sparsam verwendet werden sollte. Im Allgemeinen sollte new für die Objekterstellung verwendet werden, während sich die Platzierung new für bestimmte Szenarien eignet, in denen die Speicherverwaltung manuell durchgeführt wird.

Neuestes Tutorial Mehr>

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