Objektreferenzen in Vector / pair speichern?



  • bsp:

    class XYZ{
    
    };
    
    std::vector<std::pair<XYZ&,XYZ&> > data;
    

    sowas geht wohl nich fehler:

    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\utility(32): error C2529: '_Val1' : reference to reference is illegal
    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\utility(32): error C2529: '_Val2' : reference to reference is illegal



  • Hallo

    Nein du kannst keine Referenzen in STL-Containern verwenden (nicht das pair macht Probleme sondern der vector). Denn Referenzen sind nicht kopierbar. Da must du Pointer nehmen.

    bis bald
    akari



  • Erstmal: Dein pair<XYZ&,XYZ&> wäre nicht mehr kopierbar wegen der Referenzen und deshalb nicht als vector-Element zu verwenden (vector<> erwartet einen funktionsfähigen Zuweisungsoperator).

    Zweitens: An der Stelle wird wohl eine Referenz auf die Elementtypen des pair's verlangt - und das wäre eine (nicht zugelassene) Referenz auf eine Referenz.

    PS: Wozu brauchst du das?



  • Warum willst du Referenzen speichern? Was war dein Hintergedanke?



  • ne war nur so ein denkspiel, ich nehm pointer! ES geht darum, das wenn ein Objekt gelöscht wird, auf welches sie die referenz bezieht, soll die referenz NULL werden..


  • Mod

    es gibt keine NULL Referenzen.



  • BorisDieKlinge schrieb:

    ne war nur so ein denkspiel, ich nehm pointer! ES geht darum, das wenn ein Objekt gelöscht wird, auf welches sie die referenz bezieht, soll die referenz NULL werden..

    So etwas kannst du in C++ eigentlich schwer umsetzen. Zeiger und Referenzen setzen sich nicht automatisch auf 0 wenn das Objekt gelöscht wird. Etwas das dem ähnlich kommt kannst du z.B. in C++ mit boost::shared_ptr und boost::weak_ptr oder einer vergleichbaren Konstruktion realisieren (Zitat: "When the last shared_ptr to the object goes away and the object is deleted, the attempt to obtain a shared_ptr from the weak_ptr instances that refer to the deleted object will fail: the constructor will throw an exception of type boost::bad_weak_ptr, and weak_ptr::lock will return an empty shared_ptr").

    cu André



  • BorisDieKlinge schrieb:

    ne war nur so ein denkspiel, ich nehm pointer! ES geht darum, das wenn ein Objekt gelöscht wird, auf welches sie die referenz bezieht, soll die referenz NULL werden..

    Wie oben gesagt, können Refs nicht NULL sein. Refs sind Aliasnamen für bestehende Objekte. Wie kann man etwas einen Namen geben (auch wenn es nur ein Aliasname ist), wenn das Objekt nicht existiert? 💡

    Das was du machen willst, ist eine Art Index. Aber Vector ist ein Container (muß man sich mal bildlich vorstellen, was ein Container ist, z.B. die auf einem Ozeanfrachter), und kein Index eines Buchs.



  • hmm ok .. dann hast sich das erledigt.. werd es dann anderes machen:) danke...! Das heist wenn ein vector nur zeiger speichert, transportier der Ozianfrachter der index des buches:)


Anmelden zum Antworten