new delete without pointer



  • Ich erschaffe ein Objekt mit

    obj *o = new obj();
    

    Nun gebe ich dieses Objekt und nicht den Pointer an eine Funktion.

    funk(*obj);
    

    Nun meine Frage: Wie kann ich in der Funktion den speicher wieder frei geben?
    delete o; mozt der Compiler
    delete &o; laufzeit fehler



  • Vielleicht nen Wrapper um die funktion schreiben?
    void wrapper(obj * o)
    {
    meine_funktion(*o);
    delete o;
    }



  • Das ist nur ein minimalistisches Beispiel und das problem zu schildern... ein Wrapper ist nicht so einfach möglich...
    Danke aber habt ihr noch mehr ideen?

    Ich habe mal einen neuen Zeiger zu machen welcher auf das Objekt zeigt und den dann zu deleten.
    Klappt auch nicht... Warum eigentlich nicht ?



  • Smartpointer?!



  • ok mal algemeim bitte:
    Ich weiss doch wo sich das Objekt im heap befindet... mit & bekomme ich die Adresse und den Typ weiss ich auch ... also weshalb kann ich das Ding nicht einfach löschen... ich mache einen neuen Pointer vom richtigen typen und weise ihm die richtige Adressse zu?
    Ich verstehe einfach nicht was es da zu meckern gibt?

    Ich bin für jede erklärung dankbar.



  • muli schrieb:

    Ich weiss doch wo sich das Objekt im heap befindet...

    Hängt von der Signatur der Funktion ab. Wenn du per value übergibst, stimmt das eben nicht und du übergibst delete ein Objekt des Stacks.



  • muli schrieb:

    ok mal algemeim bitte:
    Ich weiss doch wo sich das Objekt im heap befindet... mit & bekomme ich die Adresse und den Typ weiss ich auch ... also weshalb kann ich das Ding nicht einfach löschen... ich mache einen neuen Pointer vom richtigen typen und weise ihm die richtige Adressse zu?
    Ich verstehe einfach nicht was es da zu meckern gibt?
    Ich bin für jede erklärung dankbar.

    Du übergibst eine Kopie des Objekts auf dem Stack und das zu deletene ist tödlich. Übergib das Objekt per Referenz und es klappt.



  • ok danke


Anmelden zum Antworten