I usually implement the singleton pattern this way :
class Singleton { public: virtual ~Singleton() {} static Singleton& GetInstance
One important difference between the two is that the creation of the instance in the second example is thread-safe.
You're absolutely right though, the constructor should be private.
Here's a related question: https://stackoverflow.com/a/10479084/1158895