Was ist der Unterschied zwischen "new" und "malloc" und "calloc" und anderen Familienmitgliedern?
(Wann) brauche ich etwas anderes als "neu"?
Wird einer von ihnen mit einem anderen implementiert?
new
und delete
sind C++ - spezifische Funktionen. Sie existierten nicht in C. malloc
ist die alte Art, Dinge zu tun. Meistens müssen Sie es nicht in C++ verwenden.
malloc
reserviert nicht initialisierten Speicher. Der zugewiesene Speicher muss mit free
freigegeben werden.calloc
ist wie malloc
, initialisiert jedoch den zugewiesenen Speicher mit einer Konstanten (0). Es muss mit free
freigegeben werden.new
initialisiert den zugewiesenen Speicher, indem der Konstruktor aufgerufen wird (falls es sich um ein Objekt handelt). Der mit new
zugewiesene Speicher sollte mit delete
freigegeben werden (was wiederum den Destruktor aufruft). Sie müssen die benötigte Größe nicht manuell angeben und in den entsprechenden Typ umwandeln. Somit ist es moderner und weniger fehleranfällig.neu/löschen + neu []/löschen []:
malloc/free + family:
Siehe auch meine verwandte Antwort hier
Wie andere Posts bereits betont haben: malloc/free ist Teil von C++, um mit C kompatibel zu sein.
Siehe auch: Stroustrup: new vs malloc
Mit new werden Konstruktoren für den neu zugewiesenen Speicher aufgerufen. Wenn das zuzuweisende Objekt keine Konstruktoren hat, ist new funktional identisch mit malloc. und sollte normalerweise als Referenz verwendet werden.
neu kann oder kann nicht in Bezug auf Malloc implementiert werden - der C++ - Standard erfordert keinen der beiden Ansätze.
Sie brauchen nichts anderes als neu. Es ist ein vollständiger Ersatz für Malloc in C++.
Was den Unterschied betrifft: Malloc weist nur Speicher zu. Neu zugewiesener Speicher und Aufruf der Konstruktoren. Ebenso gibt free nur den Speicher frei. Löschen gibt den Speicher frei und ruft den Destruktor auf.
Ein Wort der Warnung: Vermischen Sie nicht die beiden Redewendungen. Die Ergebnisse sind undefiniert.
der Hauptunterschied zwischen new und malloc, an den ich mich erinnern kann, besteht darin, dass Sie den durch new zugewiesenen Speicher nicht mit realloc neu zuweisen können. Wenn Sie also den Speicherblock vergrößern/verkleinern möchten, müssen Sie einen neuen Block zuweisen und alles kopieren.
Mit Calloc können Sie den von Ihnen zugewiesenen Speicherblock initialisieren, ohne dass dies bei malloc der Fall ist.
Wenn Sie ne ein Objekt, wird nicht nur Platz für das Objekt zugewiesen, sondern der Konstruktor des Objekts wird aufgerufen. Aber dies ist der C++ Weg, den es geht, malloc ist der alte Versionsweg in [~ # ~] c [~ # ~] Speicherzuweisung. calloc ist dasselbe wie malloc, außer dass der Speicher auf alle Bits Null gelöscht wird.