题目:设计一个类,我们只能生成该类的一个实例。
解法一:单线程解法
//缺点:多线程情况下,每个线程可能创建出不同的的Singleton实例
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton* getInstance()
{
if(m_pInstance == nullptr)
{
m_pInstance = new Singleton();
}
return m_pInstance;
}
static void destroyInstance()
{
if(m_pInstance != nullptr)
{
delete m_pInstance;
m_pInstance = nullptr;
}
}
private:
Singleton(){}
static Singleton* m_pInstance;
};
Singleton* Singleton::m_pInstance = nullptr;
// 单线程获取多次实例
void Test1(){
// 预期结果:两个实例指针指向的地址相同
Singleton* singletonObj = Singleton::getInstance();
cout << singletonObj << endl;
Singleton* singletonObj2 = Singleton::getInstance();
cout << singletonObj2 << endl;
Singleton::destroyInstance();
}
int main(){
Test1();
return 0;
} //缺点:多