Доброго времени суток!
В общем, такая стандартная задача стоит - сделать так, чтобы создавалось не больше 1 экземпляра некоторого класса (хоть на этапе выполнения, хоть на этапе компиляции). Первое, что приходит в голову - шаблон singleton, но я че-то хз, как им пользоваться и почему оно работает (отследить момент создания нового экземпляра несложно, а вот как запретить это?)...
Пробовал вот так (не копая глубоко в исходники буста):
#include <boost/serialization/singleton.hpp>
#include <iostream>
using namespace std;
using namespace boost::serialization;
template <class T> class TServer :
public singleton<TServer<T>>
{
private:
int a;
T b;
public:
TServer(int s) : a(s){
cout<<"TServer"<<endl;
}
int geta(){return a;};
int getb(){return b;};
void setb(const T & c){b=c;};
};
int main(int argc, char**argv)
{
TServer<int> fg(15);
fg.setb(-5);
cout<<fg.geta()<<endl;
TServer<int> fg2(25);
cout<<fg.getb()<<endl;
cout<<fg2.getb()<<endl;
cout<<fg.geta()<<endl;
cout<<fg2.geta()<<endl;
TServer<int> *fg3=new TServer<int>(105);
cout<<fg.geta()<<endl;
cout<<fg2.geta()<<endl;
cout<<fg3->geta()<<endl;
return 0;
}
Вывод:
TServer
15
TServer
-5
0
15
25
TServer
15
25
105
То есть создаются три разных экземпляра класса.