Problem mit random_shuffle()



  • Das ganze Objekt korrekt kopieren. D.h. keine Flache kopie erstellen. Es sei denn du willst den Speicher auf den gezeigt wird unter den Objekten teilen, in dem Fall wär ein Shared-Pointer ganz nett, da du sonst gefahr läufst dangling pointers zu bekommen.



  • Also muss ich eine sogenannte "deep-copy" erstellen, also muss ich doch einfach den Kopierkonstruktor so definieren, dass in diesem das Objekt per Hand kopiert wird.
    Ist das soweit richtig?



  • Das Device wirst du nicht "deep" kopieren können und auch nicht wollen.
    Das D3DXSPRITE ... keine Ahnung ob man das kopieren kann. Solle man aber wohl ...

    Ich würde eher die Klasse non-copyable machen, und boost::shared_ptr<CSprite> in den vector reinstecken anstelle von CSprite.

    Wenn deine CSprite Klasse wirklich kopierbar sein soll, dann solltest du AddRef() auf das Device aufrufen.



  • Von der Klasse noncopyable habe ich bei meinen Recherchen auch erfahren. Werde es mal damit ausprobieren..
    Danke für die Hilfen!



  • noncopyable ist keine Klasse sondern eine Eigenschaft einer Klasse. Um das zu erreichen, genügt es eigentlich den CopyCtor und den Assignment-operator private zu machen.



  • Braunstein schrieb:

    noncopyable ist keine Klasse sondern eine Eigenschaft einer Klasse. Um das zu erreichen, genügt es eigentlich den CopyCtor und den Assignment-operator private zu machen.

    In der Tat bietet boost eine Klasse mit Namen "noncopyable" an. Also ist es, unter anderem, eine Klasse! 😉



  • David_pb schrieb:

    In der Tat bietet boost eine Klasse mit Namen "noncopyable" an. Also ist es, unter anderem, eine Klasse! 😉

    Genau und der Konstruktor ist auch eine Klasse: class Konstruktor {};



  • Jester schrieb:

    David_pb schrieb:

    In der Tat bietet boost eine Klasse mit Namen "noncopyable" an. Also ist es, unter anderem, eine Klasse! 😉

    Genau und der Konstruktor ist auch eine Klasse: class Konstruktor {};

    Stimmt! 😮



  • class Ihr_seid_doof {} Jawoll;
    


  • Schöne Diskussionen, ob noncopyable eine Klasse ist oder nicht, ich hatte da wirklich eine Klasse noncopyable gemeint, so dass ich diese Klasse erstelle, den Kopierkonstruktur als privat deklariere und dann meinen Klasse von der noncopyable Klasse erben lassen. So verhindere ich dann, dass das Objekt meiner Klasse kopiert werden kann.
    Da in der Basisklasse (noncopyable) dann dieser Kopierkonstruktor deklariert ist, wird vom Compiler bei meiner Klasse kein Kopierkonstruktor mehr erzeugt und der Kopierkonstruktor der Basisklasse kann nicht aufgerufen werden, da er als privat deklariert wurde...
    So eine Klasse ist wie oben schon genannt unter Boost zu finden...
    MfG
    Hundefutter


Anmelden zum Antworten