std::cout macht selbständig was im Hintergrund?



  • jo aber copy konstruktor brauch ich wenn ich eine kopie erzeugen will ich will das tier aber ganz neu anelegen und nicht kopieren?



  • Downset schrieb:

    jo aber copy konstruktor brauch ich wenn ich eine kopie erzeugen will ich will das tier aber ganz neu anelegen und nicht kopieren?

    mit Tier("name") legst du ein ganz neues an. das wird dann in den datenbereich des containers reinkopiert und danach das originaltier gelöscht. hat am ende den gleichen effekt, als wäre das tier direkt im datenbereich des containers entstanden.



  • aha sonst mit new würde da ein pointer reinkopiert werden so wird nicht mehr mit pointer gearbeitet? so muss ich das Tier auch nicht mehr explizit löschen?



  • Ja.



  • Downset schrieb:

    aha sonst mit new würde da ein pointer reinkopiert werden so wird nicht mehr mit pointer gearbeitet? so muss ich das Tier auch nicht mehr explizit löschen?

    Ja, sonst würdest du den Pointer auf den mit new geholten Speicherbereich in der Map speichern. So speicherst du ein tatsächliches Objekt drinnen. Die Map kümmert sich nur das was sie wirklich besitzt (also im ersten Fall nur um den Pointer, im zweiten Fall nur um das Objekt). Fall 2 willst du - das sich die Map um das Objekt kümmert -> perfekt.

    MfG SideWinder



  • nein, das übernimmt der eingebaute allocator von dem container. Wo kein "new" ist, braucht man auch kein "delete". Zumindest solange der container gewissenhaft implementiert worden ist (was bei stl wirklich der fall ist, da geht gar nichts schief) [aber wenn man sich mühe gibt, kann man natürlich jederzeit memoryleaks reinbauen 😉 ]



  • Das mit den Allokatoren lassen wir erstmal außen vor, er kann die Map anwenden und weiß wie sie vorgeht - da müssen wir nicht gleich die großen Geschütze auffahren 😉

    MfG SideWinder



  • ok jetzt hab ich gecheckt - also kann man als schlussfolgerung sagen objekte sollten immer mit copy construktor angelegt werden ? weil da muss ich selber nix löschen? was bringts da mit new zu arbeiten?



  • typisch moi: hab mal in einem schlauen buch ein kompliziertes wörtchen gesehen, und versuche es jetzt in jeden zweiten satz einzubauen, um klüger auszusehen^^ 🤡 naja, dass sowas albernes nur bei vollnoobs zieht war mir schon klar 😃 😃 😃

    ps: war sowieso ein eher sinnloser beitrag, hab mich da wieder mal eingeloggt, und wollte einfach nich wieder verschwinden, ohne irgendetwas geschrieben zu haben :p
    (irgendwie ist es hier voll ruhig in den letzten paar stunden, nich?)



  • Downset schrieb:

    ok jetzt hab ich gecheckt - also kann man als schlussfolgerung sagen objekte sollten immer mit copy construktor angelegt werden ? weil da muss ich selber nix löschen? was bringts da mit new zu arbeiten?

    new setze ich ein wenn die Objekte zu groß sind um dauernd kopiert zu werden (ein Zeiger ist schneller kopiert) bzw. wenn ich die Techniker hinter dem dir wahrscheinlich noch unbekannten Stichwort "Polymorphismus" einsetzen möchte. Dann kann ich diese Vorteile haben, hab aber den Nachteil, dass ich mich selbst ums deleten kümmern muss.

    MfG SideWinder



  • Downset schrieb:

    ok jetzt hab ich gecheckt - also kann man als schlussfolgerung sagen objekte sollten immer mit copy construktor angelegt werden ? weil da muss ich selber nix löschen? was bringts da mit new zu arbeiten?

    a) manche objekte kann man nicht kopieren, zum beispiel objekte vom typ ofstream.
    b) ganz oft will man basisklassenzeiger speichern und die zeigen auf objekte, die davon geerbt haben.
    c) meistens spiel man mit zeigern aus lauter bastelfreude.


Anmelden zum Antworten