单例模式
C++
饿汉
#include <iostream>
using namespace std;
class Singleton
{
private:
Singleton() { cout << "单例对象创建!" << endl; };
Singleton(const Singleton &);
Singleton &operator=(const Singleton &);
~Singleton() { cout << "单例对象销毁!" << endl; };
static Singleton *myInstance;
public:
static Singleton *getInstance()
{
return myInstance;
}
static void releaseInstance()
{
delete myInstance;
}
};
Singleton *Singleton::myInstance = new Singleton();
int main()
{
Singleton *ct1 = Singleton::getInstance();
Singleton *ct2 = Singleton::getInstance();
Singleton *ct3 = Singleton::getInstance();
Singleton::releaseInstance();
return 0;
}
懒汉
#include <iostream>
using namespace std;
class Singleton
{
private:
Singleton() { cout << "单例对象创建!" << endl; };
Singleton(const Singleton &);
Singleton &operator=(const Singleton &);
~Singleton() { cout << "单例对象销毁!" << endl; };
public:
static Singleton *getInstance()
{
static Singleton myInstance;
return &myInstance;
}
};
int main()
{
Singleton *ct1 = Singleton::getInstance();
Singleton *ct2 = Singleton::getInstance();
Singleton *ct3 = Singleton::getInstance();
return 0;
}
C
饿汉
#include <stdio.h>
typedef struct
{
int initialized;
} Singleton;
static Singleton singleton = {1};
Singleton *getSingleton(void)
{
static Singleton *ptr = &singleton;
return ptr;
}
int main()
{
Singleton *ct1 = getSingleton();
Singleton *ct2 = getSingleton();
Singleton *ct3 = getSingleton();
return 0;
}
懒汉
#include <stdio.h>
typedef struct
{
int initialized;
} Singleton;
static Singleton *getSingleton(void)
{
static Singleton instance = {0};
static Singleton *ptr = NULL;
if (ptr == NULL)
{
ptr = &instance;
instance.initialized = 1;
printf("单例对象创建!\n");
}
return ptr;
}
int main()
{
Singleton *ct1 = getSingleton();
Singleton *ct2 = getSingleton();
Singleton *ct3 = getSingleton();
return 0;
}