The copy constructor is called by the copy constructor of derived classes, so it makes sense even if the SoundSource class itself will never be instanciated and used publicly.
There's no assignment operator because there's nothing to assign (the internal sound handle is tied to its SoundSource instance and must not be modified on assignment).
But I agree that this is an implementation detail, the class should provide something, even empty, so that derived class can implement their own assignment operator without asking too much questions
However, the base class should not provide an operator= but rather a swap() function. See the "copy and swap" implementation of assignment operators for more details.