C++中的单例模式
Posted 机械猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中的单例模式相关的知识,希望对你有一定的参考价值。
类加载顺序
实现方式
class singleton
{
protected:
singleton(){};
private:
static singleton* m_instance;
public:
static singleton* initance();
};
singleton* singleton:: m_instance = new singleton;
singleton* singleton::initance()
{
return m_instance;
}
#include <pthread.h>
class Singleton
{
private:
static Singleton* m_instance; //指向唯一实例的静态私有指针
static pthread_mutex_t mutex;
Singleton(){}; //构造函数为私有函数,因此外部无法创建该类的实例
Singleton(const Singleton&){}; //禁止拷贝
Singleton& operator=(const Singleton&){};//禁止赋值
public:
static Singleton* getInstance(); //外界唯一可以获取该实例的接口
}
static Singleton* getInstance() //静态函数只能在类外实现
{
if (m_instance== nullptr) //只有在使用的时候才会实例化
{
pthread_mutex_lock(&mutex);
{
if (m_instance == nullptr) //两次判断是为了多线程安全
{
Singleton*tmp = new Singleton(); //使用中间变量,确保构造函数运行完毕,初始化完成
m_instance= tmp;
}
}
pthread_mutex_unlock(&mutex);
}
return m_instance;
}
Singleton pthread_mutex_tmutex = PTHREAD_MUTEX_INITIALIZER;
Singleton* m_instance = nullptr;
以上是关于C++中的单例模式的主要内容,如果未能解决你的问题,请参考以下文章