Паттерн программирования 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 комментария:
Вот, более-менее ясный пример, спасибо.
GCC, в частности MingW.
Сейчас вот проверил в микрософтовском 2008 - тоже работает.
Не должен?
Ой, я удалил уже комментарий, поторопился, каюсь.
Получается я заблуждался насчет того, что объект не может быть членом своего класса (думал только указатель или ссылка, оказывается статический может...
Отправить комментарий