C ++ различные реализации синглтона

Я обычно реализую шаблон синглтона таким образом:

class Singleton
{
    public:
        virtual ~Singleton() {}

        static Singleton& GetInstance()
        {
            static Singleton instance;
            return instance;
        }

    private:
        Singleton();
        Singleton(const Singleton&);
        Singleton& operator=(const Singleton&);
}

Недавно я столкнулся с этой реализацией, которая немного отличается:

class Singleton
{
    public:
        Singleton();
        virtual ~Singleton() {}

        static Singleton& GetInstance()
        {
            return instance;
        }

    private:
        Singleton(const Singleton&);
        Singleton& operator=(const Singleton&);

        static Singleton instance;
}

Singleton Singleton::instance;

Какая реализация лучше?

Не опасно ли не делать конструктор закрытым (2-я реализация)?

Благодарю.

Ответы на вопрос(5)

Ваш ответ на вопрос