No need to use smart pointers here.
Be careful if m_Sounds is a std::vector: When inserting new objects, the container may relocate the existing elements, leading to the destruction (and stopping) of the sounds.
Furthermore, don't erase elements in the middle of the iteration in a std::vector. The std::vector::erase() call leads to copies of all the elements behind the one being removed, which has the issues mentioned above, in addition to being terribly inefficient.
You might consider std::list to store sounds, here you can also use erase() without problems. Or directly remove() or remove_if(). However, you have to use iterators instead of indices -- but you should iterate with iterators anyway, for any container (unless you actually need the random access or the numeric value of the index).