C++之单例类模板

单例类模板:一个类只能有一个对象,比如超市收银系统中清点物品的仪器只有一个

设计思路:

  1.构造函数,拷贝构造函数必须设计为private,防止自己生成新的对象

  2.且类的指针要设计为static类型,并初始化为NULL

  3.当需要使用对象时(即访问类指针)

    空值:则重新分配对象

    非空值:返回当前所指向的对象

代码如下

 1 #include<iostream>
 2
 3 using namespace std;
 4
 5 //扫描物品的工具类
 6 class SObject
 7 {
 8 private:
 9     static SObject* c_instance;
10     SObject(const SObject&);
11     SObject& operator=(const SObject&);
12     SObject()
13     {
14
15     }
16 public:
17     static SObject* GetInstance();
18     void print()
19     {
20         cout << "this = " << this << endl;
21     }
22 };
23
24 //初始化指针
25 SObject* SObject::c_instance=NULL;
26
27 //类似于构造函数
28 SObject* SObject::GetInstance()
29 {
30     if(c_instance==NULL)
31         c_instance=new SObject();
32
33     return c_instance;
34 }
35
36 int main()
37 {
38     SObject *s1=SObject::GetInstance();
39     SObject *s2=SObject::GetInstance();
40
41     s1->print();
42     s2->print();
43
44     return 0;
45 }

锦上添花之笔:考虑到可扩展性,我们可以用模板来实现

头文件内写上泛型类,利用友元类来实现

头文件:

 1 #ifndef SINGLEEXAMPLE_H_
 2 #define SINGLEEXAMPLE_H_
 3
 4 template<typename T>
 5 class Singleexample
 6 {
 7 private:
 8     static T* point;
 9 public:
10     static T* Instance();
11 };
12
13 template<typename T>
14 T* Singleexample<T>::point = NULL;
15
16 template<typename T>
17 T* Singleexample<T>::Instance()
18 {
19     if (point == NULL)
20         point = new T();
21
22     return point;
23 }
24
25 #endif

主文件

 1 #include<iostream>
 2 #include"Singleexample.h"
 3
 4 using namespace std;
 5
 6 class Obeject
 7 {
 8     friend class Singleexample<Obeject>;
 9 private:
10     Obeject(){}
11     Obeject(const Obeject&){}
12     Obeject& operator=(const Obeject&){}
13 public:
14     void print()
15     {
16         cout << "this = " << this << endl;
17     }
18 };
19
20 int main()
21 {
22     Obeject* s1=Singleexample<Obeject>::Instance();
23     Obeject* s2=Singleexample<Obeject>::Instance();
24
25     s1->print();
26     s2->print();
27
28     return 0;
29 }
时间: 2024-10-06 13:10:25

C++之单例类模板的相关文章

第62课 单例类模板

1. 单例需求的提出 (1)在架构设计时,某些类在整个系统生命期中最多只能有一个对象存在(Single Instance) (2)问题:如何定义一个类,使得这个类最多只能创建一个对象 2. 单例模式 (1)要控制类的对象数目,必须对外隐藏构造函数 (2)思路 ①将构造函数的访问属性设置为private ②定义instance,并初始化为NULL ③提供静态函数getInstance来返回单例实例,并判断当instance的值为空时,并创建对象,并保存在instance指针中,非空值时直接返回in

C++单例模式与单例类模板

1.单例模式 (1)需求的提出:在架构设计时,某些类在整个系统生命周期中最多只能有一个对象存在(Single,Instance) (2)问题:如何定义一个类,使得这个类最多只能创建一个对象? 要控制类的对象数目,必须对外隐藏构造函数 思路: @1:将构造函数的访问属性设置为private,将拷贝构造函数,赋值操作符都声明成private的,防止对象的赋值操作,因为这个类的对象只能有一个. @2:定义instance并初始化为NULL.在类中用static type* instance的方式声明一

单例类模板(五十一)

在有些时候,我们在进行架构设计时,某些类在整个系统生命期中最多只能有一个对象存在(Single Instance).比如在超市的收银系统,一个扫描机就对应一个,每个屏幕也会对应一个,基于这种情况,我们就提出了单例模式.那么问题就来了:如何定义一个类,并且使得这个类最多只能创建一个对象呢?那么就必须得控制类的对象数目,必须对外隐藏构造函数.思路是:将构造函数的访问属性设置为 private,定义 instance 并初始化为 NULL:当需要使用对象时,访问 instance 的值,如果是空值,那

28.C++- 单例类模板(详解)

描述 指在整个系统生命期中,一个类最多只能有一个实例(instance)存在,使得该实例的唯一性(实例是指一个对象指针)  , 比如:统计在线人数 在单例类里,又分为了懒汉式和饿汉式,它们的区别在于创建实例的时间不同: 懒汉式 : 指代码运行后,实例并不存在,只有当需要时,才去创建实例(适用于单线程) 饿汉式 : 指代码一运行,实例已经存在,当时需要时,直接去调用即可(适用于多线程) 用法 将构造函数的访问属性设置为private, 提供一个GetInstance()静态成员函数,只能供用户访问

Unity3D单例类模板类

C#代码   using UnityEngine; /// <summary> /// Be aware this will not prevent a non singleton constructor ///   such as `T myT = new T();` /// To prevent that, add `protected T () {}` to your singleton class. /// /// As a note, this is made as MonoBeha

Unity Singleton 单例类(Unity3D开发之二十)

猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/47335197 今天看到群里有朋友问unity单例的最佳实现方式,下面我我经常用的.贴出来供大家参考. 一.添加单例模板类 using UnityEngine; public class Singleton<T> : MonoBehaviour where T : MonoBehaviour { private

C++ 完美实现单例类(需要时要掌握它)

文章来源:http://blog.csdn.net/liuxialong/article/details/6764688 Singleton模式是常用的设计模式之一,但是要实现一个真正实用的设计模式却也不是件容易的事情. 1.         标准的实现 class Singleton { public: static Singleton * Instance() { if( 0== _instance) { _instance = new Singleton; } return _instan

C++单例类设计模式的思考

本次博文假设有一个Manager管理类,并以此为探究单例类的设计模式. 一般作法 类声明: class Manager{ public: ~Manager(); //提供单例对象访问 static Manager* getInstance(); //删除单例对象 void deleteInstance(); void dosometing(); private: //构造函数声明为 保护方法 Manager(); //单例对象指针 static Manager* s_Manager; }; 类方

C#单例类的实现

C#单例类的实现 单例类保证一个类全局仅有一个实例,并提供一个全局访问点,由于只能生成一个实例,因此我们必须把构造函数设为私有函数以禁止他人创建实例. 实现1:懒汉式,线程不安全 该实现没有额外开销,不要求线程安全的情况下可以使用: public class Singleton1 { private static Singleton1 instance = null; private Singleton1() { } public static Singleton1 Instance { get