Referenz auf std::vector braucht ständig neuen Speicher?



  • Hallo!

    Es geht um einen typisierten Vektor. Dieser ist als Feld eines Objektes gespeichert. Eine Getter-Methode soll eine Referenz darauf zurückliefern.
    Nun ist es aber so, dass folgender Code bei mri (MS VC++) pro Sekunde (pro Sekunde wird die Methode 20mal aufgerufen) eine Vergrößerung des virtuellen Speichers von ca. 32kb zur Folge hat:

    //Code in der wiederholt aufgerufenen Methode
    BallVector balls = controller->getBalls();
    
    //Deklarartion und Definition vom Controller
    typedef vector<Ball> BallVector;
    typedef BallVector::iterator BallIterator;
    
    class Controller
    {
    //....
    private:
      BallVector balls;
    public:
      BallVector& getBalls();
    };
    
    inline BallVector& Controller::getBalls()
    {
      return balls;
    }
    

    Es ist definitiv der Aufruf der Methode, entferne ich sie aus de Programm, gibt es keinen Speicherverbrauchszuwachs.

    Nach meinem Verständnis sollte der Compiler diesen Aufruf doch genauso umsetzen, als wäre ein direkter Zugriff auf das Feld erfolgt und es sollte schon gar kein zusätzlöicher Speicher angefordert und nicht mehr freigebeben werden.

    Hat einer ne Idee, wo mein Fehler liegt?

    Danke im Voraus!



  • Hier wird der Vektor garantiert nicht kopiert. Villeicht braucht ja der Algorithmus der die Referenz benötigt zusätzlichen Speicher.
    Zeig am Besten mal was du mit der Referenz anfängst.

    Achja, du musst es natürlich so schreiben, sonst wird kopiert -->

    BallVector& ref = ControllerInstance.getBalls();
    

    Gruß



  • FireFlow schrieb:

    Achja, du musst es natürlich so schreiben, sonst wird kopiert -->

    BallVector& ref = ControllerInstance.getBalls();
    

    Gruß

    Verdammt!

    Dankeschön 🙂


Anmelden zum Antworten