5 июня 2011 г.

Пример реализации паттерна Singleton на C++

Паттерн программирования Singleton в C++ можно реализовать по крайней мере двумя способами: использованием только статических членов (методов) и реализацией единственного экземпляра класса. Первый способ более тривиален и менее гибок. Поэтому представлю второй. Итак, пример файла определения синглтон-класса:

/* Файл Singleton.h */
#include <iostream>

class Singleton
{
    public:
        static Singleton& instance();
        void print(char*);
    
    protected:
        static Singleton Instance;
        
    private:
        Singleton();
        ~Singleton();
    
};

пример его реализации:

/* Файл Singleton.cpp */
#include "Singleton.h"

using namespace std;

Singleton Singleton::Instance;

Singleton& Singleton::instance()
{
    return Instance;
}

Singleton::Singleton()
{
    cout << "Create instance of Singleton class...\n";
}

Singleton::~Singleton()
{
    cout << "Destruct instance of Singleton class...\n";
}

void Singleton::print(char* txt)
{
    cout << "Singleton method void print(" << txt << ")...\n";
}

и использования:

/* Файл main.cpp */
#include "Singleton.h"

using namespace std;

int main(int argc, char *argv[])
{
    Singleton::instance().print("passing text");
    Singleton::instance().print("passing text again");
    system("PAUSE");
    return EXIT_SUCCESS;
}

4 комментария:

Анонимный комментирует...

Вот, более-менее ясный пример, спасибо.

Michael Markov комментирует...
Этот комментарий был удален автором.
Иван комментирует...

GCC, в частности MingW.
Сейчас вот проверил в микрософтовском 2008 - тоже работает.
Не должен?

Michael Markov комментирует...

Ой, я удалил уже комментарий, поторопился, каюсь.
Получается я заблуждался насчет того, что объект не может быть членом своего класса (думал только указатель или ссылка, оказывается статический может...

Отправить комментарий