Pointer, den man mehrfach freigeben muss?



  • Hi, ich habe eine Liste von Objekten, die einem anderen als Eingabe übergeben werden. Bisher kopiere ich sie aber sie können sehr groß werden. Pointer wäre möglich. Es kann aber sein, dass die Objekte nachdem sie übergeben wurden extern gelöscht werden oder alternativ, dass das Objekt an denen sie Übergeben wurden gelöscht wird.
    Gibt es die Möglichkeit, dass ich den Speicher auf den ein Pointer zeigt quasi zwei mal löschen muss, bevor er wieder freigegeben wird?



  • Verwende smart-pointer. Die drüften das für dich regeln



  • Was du brauchst ist wohl ein std::shared_ptr. Was ist aber dein konkreter Anwendungsfall? Möglicherweise gibts ne bessere Lösung.



  • std::shared_ptr schaue ich mir mal an, Danke. Schon gehört aber nich nichts mit gemacht.

    Techel schrieb:

    Was ist aber dein konkreter Anwendungsfall? Möglicherweise gibts ne bessere Lösung.

    Grob gesagt, das Objekt (Erh), welches die Objektliste (Objekttyp Lis) erhält, tut sie auf eine bestimmte Art sortieren. Wenn es dann fertig ist kann man ein Objekt von Typ Lis übergeben (muss nicht aus der Liste sein) und es gibt die Position aus, an der es in der sortierten Menge wäre. Dazu müssen in dem Objekt Erh Vergleiche zwischen den Lis Objekten gemacht werden.


  • Mod

    free(free) schrieb:

    Grob gesagt, das Objekt (Erh), welches die Objektliste (Objekttyp Lis) erhält, tut sie auf eine bestimmte Art sortieren. Wenn es dann fertig ist kann man ein Objekt von Typ Lis übergeben (muss nicht aus der Liste sein) und es gibt die Position aus, an der es in der sortierten Menge wäre. Dazu müssen in dem Objekt Erh Vergleiche zwischen den Lis Objekten gemacht werden.

    An keiner Stelle davon sehe ich Ressourcenverwaltung.



  • SeppJ schrieb:

    An keiner Stelle davon sehe ich Ressourcenverwaltung.

    Sie meinen?

    Es kann sein, dass nachdem Erh die liste mit Lis Objekten erhalten hat, die Lis liste gelöscht wird. Danach soll Erh immer noch in der Lage sein, seine Aufgabe zu erfüllen.


Anmelden zum Antworten