深圳龙华医院网站建设,wordpress网站内容,wordpress没有仪表盘,wordpress外链插件目录单例模式应用场景实现步骤涉及知识点设计与实现单例模式
通过单例模式的方法创建的类在当前进程中只有一个实例#xff1b;
应用场景
配置管理 日志记录 线程池 连接池 内存池 对象池 消息队列
实现步骤
将类的构造方法定义为私有方法 定义一个私有的静态实例 提供一…
目录单例模式应用场景实现步骤涉及知识点设计与实现单例模式
通过单例模式的方法创建的类在当前进程中只有一个实例
应用场景
配置管理 日志记录 线程池 连接池 内存池 对象池 消息队列
实现步骤
将类的构造方法定义为私有方法 定义一个私有的静态实例 提供一个公有的获取实例的静态方法
涉及知识点
static静态成员数据 static静态成员函数 template模板类 friend友元类
设计与实现
常用实现 模板实现 线程安全
main.c
#includeSingleton.h
using namespace mySingleTon;
void test() {//A::instance()-show();//B::instance()-show();singleTonA::instance()-show();singleTonB::instance()-show();
}A.h
//#pragma once
//#includestring
//#includeiostream
//using namespace std;
//
//class A {
//
//public:
// static A* instance() {
// if (m_instance nullptr) {
// m_instance new A();
// }
// return m_instance;
// }
// void show() {
// cout mName endl;
// }
//private:
// A():mName(A){}
// A(const A);
// ~A();
// A operator(const A);
//private:
// static A* m_instance;
// string mName;
//};
//A* A::m_instance nullptr;
#pragma once
#includestring
#includeiostream
#includeSingleton.h
using namespace std;class A {friend class mySingleTon::singleTonA;
public:void show() {cout mName endl;}
private:A():mName(A){}A(const A);~A();A operator(const A);
private:static A* m_instance;string mName;
};
A* A::m_instance nullptr;B.h
/*
#pragma once
#includestring
#includeiostream
#includeSingleton.h
using namespace std;class B {friend class mySingleTon::singleTonB;
public:static B* instance() {if (m_instance nullptr) {m_instance new A();}return m_instance;}void show() {cout mName endl;}
private:B() :mName(B) {}B(const B);~B();B operator(const B);
private:static B* m_instance;string mName;
};
B* B::m_instance nullptr;
*/
#pragma once
#includestring
#includeiostream
#includeSingleton.h
using namespace std;class B {friend class mySingleTon::singleTonB;
public:void show() {cout mName endl;}
private:B() :mName(B) {}B(const B);~B();B operator(const B);
private:static B* m_instance;string mName;
};
B* B::m_instance nullptr;懒汉式 多线程时是线程不安全的 Singleton.h
#pragma once
namespace mySingleTon {
templatetypename T
class singleTon {
public:static T* instance() {if (m_instance nullptr) {m_instance new T();}return m_instance;}private:singleTon() {};singleTon(const singleTon){}~singleTon(){}static T* m_instance;singleTonT operator (const singleTonT);};
templatetypename T
T* singleTonT::m_instance nullptr;};
饿汉式 多线程时是线程安全的 Singleton.h
#pragma once
namespace mySingleTon {
templatetypename T
class singleTon {
public:static T* instance() {if (m_instance nullptr) {m_instance new T();}return m_instance;}private:singleTon() {};singleTon(const singleTon){}~singleTon(){}static T* m_instance;singleTonT operator (const singleTonT);};
templatetypename T
T* singleTonT::m_instance new singleTonT ;
};