Object, mit dem eine Funktion aufgerufen wurde in Vector speichern?



  • Frage steht im Titel 🙂
    Mein Ansatz war ganz einfach so:

    void klasse::funktion()
    {
         Vector.push_back(this);
    }
    

    hm...war wohl ein bisschen naiv zu glauben, dass das so einfach funktioniert 😃 Wir könnte man das denn sonst lösen?



  • afaik so:

    void klasse::funktion()
    {
        Vector.push_back(*this);
    }
    

    hm...war wohl ein bisschen naiv zu glauben, dass das so einfach funktioniert 😃

    bis auf das * funktioniert es so einfach. 😃

    lg,
    andi01.


  • Administrator

    Was für ein Objekt? Was für ein Vektor? Was für eine Funktion?

    Grüssli



  • es geht zB so:

    class Testklasse
    {
        public:
          int a;
          void hinzufügen();
    };
    
    vector<Testklasse> Objekte;
    
    void Testklasse::hinzufügen()
    {
        Objekte.push_back(*this);
    }
    
    int main()
    {
        Testklasse tk;
        tk.a=5;
    
        cout<<Objekte[0].a;//--> 5 wird ausgegeben -> hat geklappt
    }
    

    Edit: hier hatte ich übrigens die Zeile tk.hinzufügen(); vergessen 😃

    lg,
    andi01.



  • andi01 schrieb:

    es geht zB so:

    class Testklasse
    {
        public:
          int a;
          void hinzufügen();
    };
    
    vector<Testklasse> Objekte;
    
    void Testklasse::hinzufügen()
    {
        Objekte.push_back(*this);
    }
    
    int main()
    {
        Testklasse tk;
        tk.a=5;
    
        cout<<Objekte[0].a;//--> 5 wird ausgegeben -> hat geklappt
    }
    

    lg,
    andi01.

    Dann verschweig ihm aber nicht, dass eine Kopie des Objektes erstellt wird...

    Ich denke er will eher den Vektor auf

    std::vector<klasse*> Vector;
    

    ändern.

    Dann musst du aber die Lebensdauer deiner Objekte berücksichtigen!
    EDIT: Kurz gesagt: Deine Objekte sollten (i. d. R.) nicht auf dem Stack erstellt
    werden. Und wenn du sie auf dem Heap erstellst, vergiss das freigeben nicht.

    Gruß,
    XSpille



  • ok, dann eben so:

    class Testklasse
    {
        public:
          int a;
          void hinzufügen();
    };
    
    vector<Testklasse*> Objekte;
    
    void Testklasse::hinzufügen()
    {
        Objekte.push_back(this);
    }
    
    int main()
    {
        Testklasse tk;
        tk.a=5;
        tk.hinzufügen();
    
        cout<<Objekte[0]->a;//auch hier wird 5 ausgegebn --> passt
    }
    

    der code ist ja nicht viel anders, nur dass in dem fall eben keine kopie erstellt wird 😃

    allerdings bleibt da wirklich das problem mit der lebensdauer^^ also wirklich lieber auf dem Heap erstellen:

    class Testklasse
    {
        public:
          int a;
          void hinzufügen();
    };
    
    vector<Testklasse*> Objekte;
    
    void Testklasse::hinzufügen()
    {
        Objekte.push_back(this);
    }
    
    int main()
    {
        Testklasse* tk=new Testklasse;
        tk->a=5;
        tk->hinzufügen();
    
        cout<<Objekte[0]->a;//auch hier wird 5 ausgegebn --> passt
    
        //Objekt wieder freigeben:
        delete tk;
        Objekte.pop_back();
    }
    

    lg,
    andi01.


  • Administrator

    Wie wäre es einfch mal zuerst darauf warten, dass meine Fragen beantwortet werden, statt da wild Code in der Gegend herumzuposten und wild rumzuspekulieren? 😉

    Grüssli



  • Nein da will ich gar nichts ändern 😛
    DIe Erste Antwort wars gleich 😉


Anmelden zum Antworten