Geloeschtes Vektor Element zurueckgeben



  • Abend,

    ich habe einen Vektor mit Foo Objekten.

    Jetzt habe ich eine Methode, die random ein Foo Objekt liefern soll. Jedes Foo Objekt hat ferner einen Zaehler num (startet bei 0). Es soll nur ein Foo Objekt geliefert werden, solange Foo::num < Foo::totalNum.

    Die Methode sieht so aus:

    const Foo& FooManager::getRandomFoo() const {
       int index = rand() % mFoos.size();
       mFoos[index].num++;
    
       if(mFoos[index].num >= mFoos[index].totalNum)
    	mFoos.erase(mDecals.begin() + index);
    
     return mFoos[index];
    }
    

    Wie ihr seht wird das Foo Objekt geloescht, wenn num totalNum erreicht hat. Meine Fragen:

    1. Wenn ich ein Objekt im vector mFoos an Index i loesche und danach mFoos[i] returne, dann ist das doch das Objekt NACH dem geloeschten, oder? Also muss ich vorm erase() das Objekt ausm vector holen?

    2. Mein groesseres Problem: Wenn ich nun das Objekt ausm Vektor hole:

    const Foo& f = mFoos[index];
       if(f.num >= f.totalNum)
          mFoos.erase(mDecals.begin() + index);
    
       return f;
    

    dann returne ich doch eine Referenz auf etwas, dass es nicht mehr gibt, oder? Wie kann ich das machen?



  • Keine Referenz, sondern eine Kopie zurückgeben.



  • ... und dabei nicht nur den Rückgabetyp der Funktion, sondern auch den Typ von f zu einem Werttyp machen. Denn Referenzen werden ungültig, sobald ihr Ziel zerstört wird.


Anmelden zum Antworten