Each thread works on a separate context, so unless you use their shared resources (textures) concurrently there should be no problem.
Interesting. What I do is loadings an image (if it hasn't been loaded before) to get the image's dimensions for some UV stuff calculations in a separate thread (in which geometry is being prepared for a VBO, so that the game doesn't freeze). Therefore either I access GetWidth() and GetHeight() of an existing sf::Image or create a new one. Regarding your explanation, this shouldn't be a problem at all, then (good news for you, bad news for me
). I'll check if there are any other side-effects I'm not aware of.
It's not exactly true, because the texture copies the data in its own storage. So the image cannot be used to store the texture's data. In fact, after I split the classes, sf::Image will be nearly useless (only useful for manipulating pixels before uploading them to the texture, or for keeping them in central memory for pixel perfect collisions).
Does that mean you're still thinking about a good design?