#include <stdio.h>
class Singleton {
private:
static Singleton* _instance ;
int* m_pi ;
protected:
Singleton(Singleton& s){}
Singleton& operator=(Singleton& s){return *this;}
Singleton(){
printf("Singleton コンストラクト\n") ;
m_pi = new int(0) ;
}
~Singleton(){
delete m_pi ;
m_pi = 0 ;
printf("Singleton デストラクト\n") ;
}
static void Destroy() ;
public:
static Singleton* Instance() ;
int i(void) const {return *m_pi ;}
int i(int x) {*m_pi = x ; return x ;}
} ;
Singleton* Singleton::_instance = 0 ;
void Singleton::Destroy(){
delete _instance ;
}
Singleton* Singleton::Instance() {
if (_instance == 0) {
_instance = new Singleton ;
atexit(Destroy) ;
}
return _instance ;
}
static void set(int i){
Singleton::Instance()->i(i) ;
}
static int get(void){
return Singleton::Instance()->i() ;
}
int main(void){
set(10) ;
printf("%d\n", get()) ;
return 0 ;
}