Was ist der Unterschied zwischen „neuen“ und „malloc“ und „calloc“ in C ++? [Duplikat]

StackOverflow https://stackoverflow.com/questions/807939

Frage

Was ist der Unterschied zwischen „neuen“ und „malloc“ und „calloc“ und andere in der Familie?

(Wenn) Muss ich etwas brauchen anders als "neu"?

Ist einer von ihnen umgesetzt andere Verwendung?

War es hilfreich?

Lösung

new und delete sind C ++ spezifische Funktionen. Sie existieren nicht in C. malloc ist die alte Schule C Art und Weise, Dinge zu tun. Die meiste Zeit, Sie werden es nicht in C ++ verwenden müssen.

  • malloc ordnet nicht initialisierten Speicher. Der zugewiesene Speicher mit free freigegeben werden.
  • calloc wie malloc ist aber initialisiert den zugewiesenen Speicher mit einer konstanten (0). Es muss befreit werden mit free.
  • new initialisiert den zugewiesenen Speicher durch den Konstruktor aufrufen (wenn es ein Objekt ist). Speicher mit new zugewiesen sollten mit delete freigegeben werden (was wiederum ruft der destructor). Es braucht nicht manuell die Größe, die Sie angeben müssen, und es in den entsprechenden Typ gegossen. Daher ist es modernere und weniger fehleranfällig.

Andere Tipps

neu / löschen + new [] / delete []:

  • neu / löschen ist die C ++ Art und Weise Speicher und ausplanen Speicher aus dem Heap zugewiesen werden.
  • new [] und delete [] ist die C ++ Art und Weise Arrays von zusammenhängenden Speicher zuzuweisen.
  • Sollte verwendet werden, da es mehr Typen sicher als malloc
  • ist
  • Sollte verwendet werden, da es den Konstruktor / Destruktor
  • ruft
  • Kann nicht in einer realloc Weise verwendet werden, aber neue Platzierung wieder verwenden die gleichen Puffer von Daten verwenden können,
  • Die Daten können nicht mit neuen zugeordnet werden und mit freiem befreit, noch löschen []

malloc / free + Familie:

  • malloc / free / Familie ist die C Art und Weise und die freie Speicher aus dem Heap zu reservieren.
  • calloc ist die gleiche wie malloc aber initialisiert auch den Speicher
  • Sollte verwendet werden, wenn Sie den Speicher
  • müssen neu zuzuteilen
  • Die Daten können nicht mit malloc und befreit mit Lösch zurechenbar noch löschen []

Siehe auch mein Antwort hier im Zusammenhang

  • neu zuordnet und Anrufe an Ctor (die Reihenfolge nicht näher bezeichnet ist), die dtor löschen und befreit die durch einen Anruf zugewiesenen Speicher zu neuen
  • malloc nur Speicher zuordnet, frei löscht von malloc Speicher
  • neu implementiert werden können malloc (nicht erforderlich, wenn der Standard)
  • calloc macht das Gleiche wie malloc und zeroizes auch die neu zugewiesenen Speicher

Wie andere Beiträge haben darauf hingewiesen:. Malloc / free Teil von C ++ kompatibel zu sein mit C

Siehe auch: Stroustrup: neue vs malloc

Mit neuen Mitteln, die Konstrukteure auf den neu zugewiesenen Speicher aufgerufen werden. Wenn das Ding zugeordnet sind Konstrukteure nicht hat, ist neu funktional identisch mit malloc. und sollte in der Regel in pereference darauf verwendet werden.

new kann oder auch nicht im Hinblick auf die malloc implementiert werden können - der C ++ Standard nicht entweder Ansatz erfordert

.

Sie brauchen nichts anderes als neu. Es ist ein vollständiger Ersatz für malloc in C ++.

Wie für die Differenz: Malloc reserviert nur Speicher. Neu zugewiesenen Speicher und ruft die Konstrukteure. Ebenso frei veröffentlicht nur die Erinnerung. Löschen gibt den Speicher und ruft den destructor.

Ein Wort der Warnung: Verwenden Sie die beiden Idiome nicht mischen. Die Ergebnisse sind nicht definiert.

Der Hauptunterschied zwischen neuen und malloc ich mich erinnern kann, ist, dass Sie nicht Speicher zugewiesen durch neue mit realloc umverteilen können. Also, wenn Sie die Größe des Speicherblocks erhöhen / verringern wollte, musste man einen neuen Block verteilen und kopieren Sie alles über.

calloc können Sie den Speicherblock initialisieren Sie malloc zuweisen, während nicht.

Wenn Sie neue ein Objekt, Raum für das Objekt wird nicht nur zugeordnet, sondern die Konstrukteurs-Objekt aufgerufen wird. Aber das ist die C ++ Art und Weise ihres getan, malloc ist die alte Version Art und Weise in C Speicher zugewiesen wird. calloc ist die gleiche wie malloc , mit Ausnahme es löscht Speicher alle Bits Null.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top