C ++ różne implementacje singleton

Zazwyczaj implementuję wzorzec singleton w ten sposób:

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

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

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

Niedawno natknąłem się na tę implementację, która jest nieco inna:

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;

Która implementacja jest lepsza?

Czy nie jest niebezpieczne, aby konstruktor nie był prywatny (druga implementacja)?

Dzięki.

questionAnswers(5)

yourAnswerToTheQuestion