It wouldn't work if it was a reference. References can only be initialized at declaration, so this would still be a copy anyway. To keep a reference instead of copying the view, the myCurrentView member would have to be a pointer (that was the case before).
Oh yeah I'm just being stupid. Comment is a bit misleading.
Why? The purpose is that you don't have to care about what SFML does internally, it never impacts what you do with OpenGL outside. I could tell you about the internal details, but there's no point for you to know that, it should even change in the next days.
Because I want to render with OpenGL under SFML's view transformation. For example, now there is no way for me to draw 1-pixel-wide lines, for, say, a grid. Now I have to manually push SFML's view transformation back onto the OpenGL state.
It allows batching, which is much faster.
I don't see any batching, every drawable seems to make a new batch every frame. Besides, you can't just batch any N drawables together because they might be overlapping, in which case you will get inconsistent behavior (one might show on top of the other even though you want to draw it first).
It would be much more efficient for every drawable to create its own VBO at time of creation or modification, and keep that VBO until it dies. If the user wants to batch things together, he can use a BatchDrawable which takes the VBOs of N Drawables and puts them all into a single VBO which then moves as a whole.
This is how high-performance 3D engines do it, and it is no different in 2D.
It also reduces the number of states changes from N (number of drawables) to 1 per frame.
I don't understand how reducing the amount of state changes has anything at all to do with the queue. You can have a list of random objects and still have a single state change, regardless of a queue.