I think that things are overcomplicated in your head; or at least biased by your personal background
Can we please stop with the implications that I'm not a C++ developer? I've been using C++ for something like 18+ years now. It doesn't really add to the conversation, all it does is make it easy to dismiss anything I say, and that isn't fair to me.
Of couse I could use shared ownership between user and sf::Sprite, but that would involve to manipulate sf::Texture instances through pointers and to allocate them on the heap. That would be a pretty bad design for C++; it would be ok for garbage collected languages.
That's disingenuous. At the end of the day, that texture is sitting on the vid card, and what you have is an OGL handle referencing it. You could just as easily have passed that handle around via copy constructors and treated the Texture class as a glorified strong reference that indicated to the OGL driver it should be destroyed when there were no more references.
Thinking about it, is that why you keep implying my background is GC'd languages? I don't believe that usage pattern would be foreign to any C++ developer with even a little bit of experience, or I should say I hope not. These types of mechanisms are why I'm able to tell people that if they're manually managing memory in modern day C++, they're either working really close to the hardware, or they're not using C++ optimally.
But I find myself managing the textures much like I would a raw pointer. In C++.
And I want to be clear, I'm not saying you should have done it this way. Pros and cons to everything, the approaches I'm referring to have downsides as well. Slightly larger memory consumption depending on how they're implemented, possible issues in multi-threaded environments, possible performance implications due to the larger size of the objects, and so on.
But your approach has definite downsides too. expensive copy, manually having to track the lifetime of the texture objects or risk running into a 'dangling pointer'-esque issue, possible multi-threaded issues, and so on.
But I think citing RAII is misguided.
Ultimately it's a question of value semantics vs reference semantics. I would have expected reference semantics to the underlying texture, but I got value semantics, and it caught me off guard.
But whether you agree with me or not, I see no reason why you couldn't add a small blurb about that onto your code documentation to make it more explicit. From epxloiter's own mouth in the other thread I linked to, this is a common misconception for people new to SFML.