#include <stdio.h>
#include <memory>
using namespace std ;
class Singleton {
private:
friend auto_ptr<Singleton> ;
static auto_ptr<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") ;
}
public:
static Singleton* Instance() ;
int i(void) const {return *m_pi ;}
int i(int x) {*m_pi = x ; return x ;}
} ;
auto_ptr<Singleton> Singleton::_instance ;
Singleton* Singleton::Instance() {
if (_instance.get() == 0) {
_instance = auto_ptr<Singleton>(new Singleton) ;
}
return _instance.get() ;
}
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 ;
}