std::vector, referenzen und kopieren



  • Achso, dann hab ich dich falsch verstanden. Ich dachte das wären alles Heap-Objekte. Ist bei Polymorphie eigentlich auch normal, naja ...

    Dann fragt sich natürlich, wohin willst du die Objekte denn kopieren, wenn nicht auf den Heap?



  • der aufrufer der push-funktion will einfach ein event in den queue einfügen. der queue kopiert es (auf den heap) und speichert es in seinem vector. mit einer anderen methode von queue kann man dann wieder events vom queue nehmen und verarbeiten (sie verarbeiten sich bei mir eher selber).
    Bei der push-funktion hbee ich das Problem, dass ich nicht weiß, wie ich die übergabe auf den heap kopiere. Bei new muss ich ja den typ angeben, was schlecht möglich ist, wenn ich garnicht weiß, welchentyp das übergebene event überhaupt hat.
    Ich hoffe es wird nun etwas klarer.
    geloecht



  • Mach doch gleich

    myqueue.push(new event(foo, bar));
    

    das Kopieren erübrigt sich dann.



  • Wenn du sowieso Zeiger auf dieses Objekt speicherst, wäre eine Kopie doch sowieso
    überflüssig, vor allem weil in der Liste, dann doch nur eine Kopie und nicht mehr
    das Original stehen würde.



  • Bashar schrieb:

    Mach doch gleich

    myqueue.push(new event(foo, bar));
    

    das Kopieren erübrigt sich dann.

    und wer deleted das objekt dann wieder? Soll queue es wieder deleten? queue kann ja nicht sicher sein, dass es wirklich mit new allokiert wurde...

    SirLant schrieb:

    Wenn du sowieso Zeiger auf dieses Objekt speicherst, wäre eine Kopie doch sowieso überflüssig, vor allem weil in der Liste, dann doch nur eine Kopie und nicht mehr das Original stehen würde.

    Mit der Kopie könnte ich sichergehen, dass ich sie wirklich mit new allokiert habe, und könnte sie auch wieder in queue Klasse freigeben. Sonst hat die queue Klasse ja garkeine Ahnung, woher das Objekt kommt. Zeiger speichere ich sowieso nur wegen der Polymorphie...

    geloescht



  • geloescht schrieb:

    Soll queue es wieder deleten? queue kann ja nicht sicher sein, dass es wirklich mit new allokiert wurde...

    Zum Beispiel. Denk dir was aus. Wenn du auf Sicherheit dieser Art bedacht bist, wieso benutzt du dann eigentlich C++?



  • Du musst die Queue durchgehen und deine Elemente selber wieder mit delete freigeben.

    @Bashar: Javaianer unter uns? 🤡

    MfG SideWinder



  • SideWinder schrieb:

    @Bashar: Javaianer unter uns? 🤡

    Nö, Freizeit-Lisper.



  • Bashar schrieb:

    geloescht schrieb:

    Soll queue es wieder deleten? queue kann ja nicht sicher sein, dass es wirklich mit new allokiert wurde...

    Zum Beispiel. Denk dir was aus. Wenn du auf Sicherheit dieser Art bedacht bist, wieso benutzt du dann eigentlich C++?

    Ich hab einfach Angst, etwas falsch zu machen und nachher dumm dazustehen. Überall wird man gewarnt alles wieder zu deleted und es ja nirgends zu vergessen, da war ich einfach etwas zögerlich. naja, ich werds dann wohl so machen. Ich finds aber ziemlich schade, dass man nicht irgendwie

    new typ_von(foo)
    

    machen kann.

    SideWinder schrieb:

    Javaianer unter uns? 🤡

    Hab noch nie was mit Java geproggt 😃

    geloescht



  • In "Mehr Effektiv C++" gibts nen kapitel über das Problem, wenn man sichergehen
    muss, dass das Objekt im Freispeicher liegt, ich weiß jetzt allerdings nicht mehr
    genau wie das ging, müsst ich nacher mal nachschlagen (es sei denn sonst wer weiß es :D).


Anmelden zum Antworten