new in funktion



  • Hi,

    ich habe folgende Frage. Ich erzeuge in meinen Programm in einer Funktion ein mit new dynamisch erzeugtes Objekt. Diese wiederum übergebe ich an eine andere Funktion die ein Array von Zeiger dieses Typs enthält.

    Jetzt habe ich das Problem, dass man ja mit new geforderten Speicher auch wiederum mit delete wieder freigeben muss, damit keine Speicher Leaks entstehen. Meine Frage ist wo muss ich das delete denn machen? Wenn ich das delete in der Funktion mache, wo ich das erzeuge habe doch dann die andere Funktion nichts damit anfangen, weil dieses doch dann gelöscht ist? Oder ist das Objekt nocht vorhanden? Und wie kann ich dann darauf zugreifen?

    mfg
    meeper



  • reserviere doch einfach in beiden funktionen speicher



  • meeper schrieb:

    Wenn ich das delete in der Funktion mache, wo ich das erzeuge habe doch dann die andere Funktion nichts damit anfangen, weil dieses doch dann gelöscht ist?

    Genau, darum musst du den Speicher anderswo freigeben. Evtl dort wo das Array welches die Zeiger hält zerstört wird.



  • löschen kannst du überall, wo du den zugriff auf den zeiger hast.
    dieser ist ja in dem array gespeichert. also auch überall dort wo du zugriff auf das array hast.



  • Wie schon alle geschrieben haben, kannst du den mit new reservierten Speicher überall wieder freigeben, wo du Zugriff auf den Pointer des Arrays hast.

    Allerdings überlege dir gut ob du das willst... denn wenn du in einer Funktion (oder meinst du Methode?) Speicher allokierst und du dann in einer fremden Funktion (die einen anderen Zweck erfüllt) wieder freigibst, dann ist der Code nicht wirklich portabel und die Funktion nicht wiederverwendbar.

    Da du ja C++ verwendest wie wäre ein klassenbasiertes Modell für das?
    Deine beiden Funktionen(=Methoden) als Public und den Pointer als private. Dann eine allocate und deallocate Methode (oder vielleicht gleich in den Konstruktor/Destrutktor einbauen) und schon ist das ganze portabel und gut 🙂

    Denk vielleicht mal darüber nach 😋

    Greetz


Anmelden zum Antworten