[C++] Erstellen eines Objekts: mit oder ohne `new`


Answers

Die erste weist ein Objekt mit automatischer Speicherdauer zu, was bedeutet, dass es beim Verlassen des Bereichs, in dem es definiert ist, automatisch zerstört wird.

Die Sekunde hat ein Objekt mit dynamischer Speicherdauer zugewiesen, was bedeutet, dass es erst delete wird, wenn Sie explizit delete verwenden.

Question

Mögliche Duplikate:
Was ist der Unterschied zwischen der Instantiierung eines Objekts mit new vs. without?

Dies ist wahrscheinlich eine grundlegende Frage und könnte bereits gestellt worden sein (sagen wir here ); aber ich verstehe es immer noch nicht. Also, lass es mich fragen.

Betrachten Sie die folgende C ++ - Klasse:

class Obj{
    char* str;
public:
    Obj(char* s){
        str = s;
        cout << str;
    }
    ~Obj(){
        cout << "Done!\n";
        delete str;        // See the comment of "Loki Astari" below on why this line of code is bad practice
    }
};

Was ist der Unterschied zwischen den folgenden Code-Snippets:

Obj o1 ("Hi\n");

und

Obj* o2 = new Obj("Hi\n");

Warum ersteres den Destruktor aufruft, letzteres aber nicht (ohne expliziten Aufruf zum delete )?

Welches ist bevorzugt?