Objekte einmalig in Containern speichern ohne new



  • Hallo,

    was ist die beste Art, folgendes Konstrukt zu vermeiden?
    Jedes Objekt sollte einmalig sein, d. h. nicht kopiert werden. Daher habe ich bisher immer mit Rohpointern und new gearbeitet - aber das ist ja bekanntlich nicht mehr modern.

    std::list<Player*> players;
    

    Gruß



  • ...



  • Wenn du nur so wenig Informationen lieferst:

    std::list<Player> players;
    

    Mit emplace_back wird das Kopieren vermieden.


  • Mod

    Oder du guckst dir mal Boost.Intrusive an.



  • Oder Boost.PtrContainer. Wenn du bei der Standardbibliothek bleiben möchtest, kannst du es mit Emplace versuchen, das funktioniert aber nicht mit polymorphen Objekten. Ansonsten kannst du std::unique_ptr innerhalb von STL-Containern verwenden.

    Swordfish schrieb:

    Weil ... ?

    Als ob der Grund von irgendeiner Relevanz wäre.



  • Hallo,

    emplace scheint mein Compiler noch nicht so optimal zu unterstützen, MSVC11 kann eben noch keine Variadic Templates.

    Boost.PtrContainer schaut für mich in der Situation nun erst mal am besten aus. Boost.Intrusive schaut auf den ersten Blick etwas mächtiger, da möchte ich mich erst mal noch nicht einarbeiten.

    Danke an alle!


  • Mod

    Nexus schrieb:

    Swordfish schrieb:

    Weil ... ?

    Als ob der Grund von irgendeiner Relevanz wäre.

    Wenn man den Grund kennt, kann man bessere Tipps geben, welches Mittel wohl das richtige wäre.



  • Beispiel: Ein Objekt wird mit Daten aus einer Datenbank gefüllt. Nun werden diese Objekte über längere Laufzeit im Programm verändert, ohne die Änderungen direkt in die Datenbank zu schreiben. Sollten die Objekte kopiert werden, könnten schnell Inkonsistenzen auftreten.


Log in to reply