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