If a function is defined in the header file (that is the function's body is in the header file), then the compiler can choose to inline the function as an optimization. If the function is defined in the source file, then the compiler can't inline it. Other than that, there really isn't any difference.
However, there are folks who would argue that you should put function definitions in the source file as much as possible to make it so that people who use the header file won't see the function definition.
Generally speaking, if you have short function which you think stands a good chance of being inlined, then it's a good idea to put it in the header file, so that the compiler can make that optimization. Otherwise, it's best to put it in the source file where it doesn't clutter things. And ideally, the header file shows the API, not the implementation, of the class anyway.
As for a singleton's constructor and destructor, they'll only be called once in the entire program, so you don't gain anything by inlining them, so you might as well stick them in the source file if you're doing much of anything in them. But if they're empty, why waste the space in the source file? Just put them in the header file.