597 Stimmen

In welchen Fällen sollte ich malloc und/oder new verwenden?

Ich sehe, dass es in C++ mehrere Möglichkeiten gibt, Daten zuzuweisen und freizugeben, und ich verstehe, dass Sie beim Aufruf von malloc sollten Sie anrufen free und wenn Sie die new Operator sollten Sie koppeln mit delete und es ist ein Fehler, die beiden zu vermischen (z.B. Aufruf von free() auf etwas, das mit dem Programm new Operator), aber ich bin mir nicht sicher, wann ich die malloc / free und wann sollte ich die new / delete in meinen Programmen der realen Welt.

Wenn Sie ein C++-Experte sind, lassen Sie mich bitte wissen, welche Faustregeln oder Konventionen Sie in dieser Hinsicht befolgen.

2voto

Barry Punkte 39

Im folgenden Szenario können wir new nicht verwenden, da es den Konstruktor aufruft.

class  B  {
private:
    B *ptr;
    int x;
public:
    B(int n)  {
        cout<<"B: ctr"<<endl;
        //ptr = new B;  //keep calling ctr, result is segmentation fault
        ptr = (B *)malloc(sizeof(B));
        x = n;
        ptr->x = n + 10;
    }
    ~B()  {
        //delete ptr;
        free(ptr);
        cout<<"B: dtr"<<endl;
    }
};

2voto

Ein seltener Fall, in dem man malloc/free anstelle von new/delete verwenden sollte, ist die Allokation und anschließende Reallokation (einfacher Pod-Typen, nicht von Objekten) mit realloc, da es keine ähnliche Funktion wie realloc in C++ gibt (obwohl dies mit einem eher C++-artigen Ansatz möglich ist).

0voto

selwyn Punkte 1154

Le site new y delete Operatoren können auf Klassen und Strukturen wirken, während malloc y free funktioniert nur mit Speicherblöcken, die gecastet werden müssen.

Verwendung von new/delete wird dazu beitragen, Ihren Code zu verbessern, da Sie den zugewiesenen Speicher nicht auf die erforderliche Datenstruktur übertragen müssen.

0voto

Michał Leon Punkte 1906

Übrigens, wenn Sie Code mit malloc haben, verwenden Sie diese Regex:

Suche nach:

\((\w+)\*\)malloc\((\w+)\)

Ersetzen durch:

new \1[\2]

-4voto

Hitesh Ahuja Punkte 11

Malloc() wird verwendet, um in C dynamisch Speicher zuzuweisen zugewiesen, während die gleiche Arbeit in C++ von new() erledigt wird. Sie können also nicht die Codierungskonventionen von 2 Sprachen vermischen. Es wäre gut, wenn Sie nach dem Unterschied zwischen calloc und malloc() fragen würden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X