Hello,
I believe sf::Sound lacks a callback for when it finishes playing. Unlike sf::Sprite, it can't be destroyed before it finishes playing, therefore managing sf::Sound instances is tricky.
Currently, you need to manually manage each sf::Sound instance. The best solution I come up with so far was to keep track of all sf::Sound instances created and periodically iterate through them, deleting the ones that have Status::Stopped.
I do not believe this an optimal solution. Having sf::Sound call your callback object when it's done playing would give you the opportunity to delete the now useless sf::Sound instead of having to manually check if it's stopped.
IIRC SDL had support for such a callback.
Cheers and keep up the excellent work,
Victor Freire