饿汉模式
/*
#include<iostream>
using namespace std;
class Test
{
public:
static Test* Getinstance()//只能以指针返回,其他不行。static调用约定不是thiscall
{
return m_instance;
}
private:
Test()//将构造和拷贝构造写在私有下
{};
Test(const Test & rhs)
{};
static Test * m_instance;
};
Test * Test :: m_instance = new Test(); //static成员变量必须初始化
int main()
{
Test * a = Test :: Getinstance();
Test * b = Test :: Getinstance();
cout<< a <<" --- "<<b<<endl;
}
*/
懒汉模式
#include<iostream>
#include<mutex>
/*
using namespace std;
mutex m;
class Test
{
public:
static Test * Getinstance()//只能以指针返回,其他不行。static调用约定不是thiscall
{
if(NULL == m_instance)//双重锁机制,保证在创建对象后不在进行加解锁,提高CPU效率,
{
m.lock();
if(NULL == m_instance)
{
m_instance = &Test();
}
m.unlock();
}
return m_instance;
}
private:
Test()//将构造和拷贝构造写在私有下
{};
Test(const Test & rhs)
{};
static Test * m_instance;
};
Test * Test :: m_instance = NULL; //static成员变量必须初始化
int main()
{
Test * a = Test :: Getinstance();
Test * b = Test :: Getinstance();
cout<< a <<" --- "<<b<<endl;
}
*/
本文深入探讨了饿汉模式和懒汉模式在C++中的实现方式,通过具体代码展示了两种模式下单例对象的创建过程。饿汉模式在类加载时就创建实例,而懒汉模式则在首次调用时创建,更注重资源的有效利用。
1518

被折叠的 条评论
为什么被折叠?



