You can just store the texture object in the main function and pass (by reference or pointer) it to the objects that use it. That way, it will last the entire length of the program but is not global so its destruction can be predicted.
Note that this carries for all resources, which is why a (more) global resource manager is often used. By "more global", I mean in the main function or top level of the game/application class, not outside of the main function.
If you use pointers to allocate memory for the resources, use smart pointers. (std::unique_ptr<sf::Texture> texture)
Alternatively, just use vectors of each resource. The actual item data (the resource) still ends up in the heap. (std::vector<sf::Texture> textures)