Im Gegensatz zu den allgegenwärtigen new- und delete-Ausdrücken zeigt std::malloc ein einzigartiges Verhalten: Das tut es Ruft den Konstruktor eines Objekts bei der Speicherzuweisung nicht automatisch auf. Dies wirft die Frage auf: Wie können wir mit malloc ein Objekt erstellen und gleichzeitig den Aufruf des Konstruktors sicherstellen?
Antwort:
Der empfohlene und intuitive Ansatz besteht darin, den neuen Operator zu verwenden. die von Natur aus sowohl die Speicherzuweisung als auch den Konstruktoraufruf übernimmt. Alternativ können wir den Konstruktor manuell über „Placement New“ aufrufen, eine Technik, die explizite Konstruktoraufrufe verwendet.
Der folgende Codeausschnitt veranschaulicht die Verwendung von Placement New:
<code class="cpp">A* a = (A*)malloc(sizeof(A)); new (a) A();</code>
Hier zeigt der Zeiger a auf den zugewiesenen Speicher der Größe sizeof(A), und der Platzierungs-Neuausdruck new (a) A() erstellt anschließend ein A-Objekt an diesem Speicherort.
Wenn das Objekt nicht mehr benötigt wird, rufen wir den Destruktor manuell auf und geben den zugewiesenen Speicher frei:
<code class="cpp">a->~A(); free(a);</code>
Es ist wichtig zu beachten, dass die Platzierung „Neu“ normalerweise nicht verwendet wird, es sei denn, es liegen bestimmte Umstände vor, die dies verbieten die Verwendung von Neu und Löschen.
Das obige ist der detaillierte Inhalt vonWie kann ich mit malloc ein Objekt erstellen und den Konstruktoraufruf sicherstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!