Eh, ich denke, dass new
und malloc
sind unterschiedlich und allocator
bietet verschiedene Funktionen. malloc
gibt nicht initialisierte Daten zurück und calloc
gibt null -ed Daten zurück. Aber new
würde den Konstruktor aufrufen, wenn Sie eine Instanz einer Klasse erstellen (nicht int
, bool
diese primitiven Typen, die übrigens auch initialisiert werden können). delete
würde den Destruktor aufrufen, während free
nicht.
Wie für allocator
bietet es eine Abstraktionsschicht für den Benutzer. allocator
kann konstruiertes Objekt, nicht initialisierten Speicherplatz zurückgeben oder ein Objekt zerstören oder den Speicherplatz freigeben. STL-Container verwenden allocator
, um Speicherplatz zu erhalten und ein Objekt zu erstellen.
Aber beachten Sie, dass benutzerdefinierte allocator
möglich ist, wird ein allocator
nicht unbedingt Speicher new
/delete
wie verwalten. Es kann einen großen Teil des Speichers erstellen, dann einige Zuordnung Cache. Es kann die Speicheradresse in Bereichen zurückgeben, die den Dateien auf der Festplatte zugeordnet sind, so dass die internen Daten in das Dateisystem gelangen, wie es von der oberen Ebene Container geändert wird. Es kann auch new
aufrufen, um Speicher zu erhalten. Auf diese Weise ermöglicht allocator
Benutzer, Container zu erstellen, die in bestimmten Bereichen des Speichers liegen. Mit allocator
s wird die interne Logik der Container von der Art und Weise getrennt, in der der Speicher verwaltet wird.
Eigentlich können Sie eine von std::allocator
abgeleitete Klasse schreiben, um alle oben genannten Funktionen zu implementieren.
Sie könnten this für eine ausführlichere Diskussion über allocator
s lesen möchten.
1 Google-Suche: http://wiki.answers.com/Q/What_is_the_difference_between_malloc_and_new_other_than_syntax –
Floris Velleman, ich war nicht auf der Suche nach dem Unterschied zwischen neuen und löschen. – BJC
Hmm. Ich sehe nicht, wie das "Duplikat" diese spezifische Frage beantwortet. Nun, vielleicht teilweise ("Allokatoren sind steckbar"), aber es geht nicht um die spezifische Frage nach der Unterscheidung zwischen Allokation und Konstruktion. Ich bin mir auch nicht sicher über den Grund für den Downvote. –