Ich bin auf einen Code gestoßen, der allocate
ausgiebig verwendet. Zum Beispiel
Ich habe noch nie allocate verwendet und daher die Frage, was ist der Unterschied zwischen malloc und allocate?
Ein Unterschied, den ich feststellen kann, obwohl ich mir über seinen Vorteil nicht im Klaren bin, ist, dass malloc rohen Speicher gibt, wo es wie reserviert erscheinen wird, aber ich muss den Zeiger nicht auf einen bestimmten Typ umwandeln.
Von allocate
documentation:
Ordnet
n * sizeof(T)
nicht initialisierten Speicher durch Aufrufen von::operator new(std::size_t)
zu, aber ist nicht angegeben, wann und wie diese Funktion aufgerufen wird .
Auch von diese Frage , können Sie sehen, dass new
und malloc
zu unterschiedlichen Ergebnissen führen.
Es scheint, dass der Unterschied darin besteht, dass Sie mit allocate
nur die Anzahl der gewünschten Elemente und nicht die Gesamtgröße angeben müssen, und der Rückgabetyp wird automatisch in den richtigen Typ umgewandelt.
In C ++ sollten Sie fast nie beides verwenden, aber bevorzugen Sie new
, das entsprechende Konstruktoren aufrufen wird.
Vom Konzept her machen diese beiden Funktionen genau dasselbe. Das einzige Mal, dass Sie einen Unterschied sehen, ist, wenn Sie "auf die Innenseite der Funktion schauen" oder Sie nicht genügend Speicher haben ( malloc
wird NULL zurückgeben, da allocate
Aufrufe ::new
, es wird ein% geworfen co_de% Ausnahme).
Ich denke, es ist "besseres C ++", um bad_alloc
zu verwenden (aus keinem anderen Grund als "Sie müssen nicht allocate
casten").
Nachdem das gesagt wurde, wäre die Verwendung von allocate
der normale Weg in C ++ und außerhalb von Orten, an denen Sie in ::new T[elements]
übergeben haben, sollten Sie das tun.
Tags und Links c++