singleton, dlaczego to działa

0

Witam, od pewnego czasu mam problem ze zrozumieniem kawałka kodu, wertuje dokumentacje ale nie potrafię znaleŹć dlaczego to działa.

class Singleton
{
private:
    Singleton(){};
    Singleton( const Singleton & ){};
public:
    static Singleton & get()
    {
        static Singleton singleton;
        return singleton;
    }
};

Co dokładnie robi linia "static Singleton singleton;"? Dlaczego to działa i przy każdym wywołaniu Singleton::get() dostaję ten sam obiekt? Dlaczego nie ma błędu redefinicji?

5

Bo funkcja jest static czyli działa na rzecz klasy a po drugie standard języka C++ gwarantuje że inicjalizacja zmiennej statycznej (w ciele metody), będzie wykonana tylko raz przy pierwszym wejściu do funkcji i atomowo. Tak więc jednocześnie taki singleton jest bezpieczny wielowątkowo. (sekcja 6.7 standardu)

0

Dzięki wielkie;

1 użytkowników online, w tym zalogowanych: 0, gości: 1