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

设计思路:

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

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

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

    空值:则重新分配对象

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

代码如下

 #include<iostream>

 using namespace std;

 //扫描物品的工具类
class SObject
{
private:
static SObject* c_instance;
SObject(const SObject&);
SObject& operator=(const SObject&);
SObject()
{ }
public:
static SObject* GetInstance();
void print()
{
cout << "this = " << this << endl;
}
}; //初始化指针
SObject* SObject::c_instance=NULL; //类似于构造函数
SObject* SObject::GetInstance()
{
if(c_instance==NULL)
c_instance=new SObject(); return c_instance;
} int main()
{
SObject *s1=SObject::GetInstance();
SObject *s2=SObject::GetInstance(); s1->print();
s2->print(); return ;
}

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

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

头文件:

 #ifndef SINGLEEXAMPLE_H_
#define SINGLEEXAMPLE_H_ template<typename T>
class Singleexample
{
private:
static T* point;
public:
static T* Instance();
}; template<typename T>
T* Singleexample<T>::point = NULL; template<typename T>
T* Singleexample<T>::Instance()
{
if (point == NULL)
point = new T(); return point;
} #endif

主文件

 #include<iostream>
#include"Singleexample.h" using namespace std; class Obeject
{
friend class Singleexample<Obeject>;
private:
Obeject(){}
Obeject(const Obeject&){}
Obeject& operator=(const Obeject&){}
public:
void print()
{
cout << "this = " << this << endl;
}
}; int main()
{
Obeject* s1=Singleexample<Obeject>::Instance();
Obeject* s2=Singleexample<Obeject>::Instance(); s1->print();
s2->print(); return ;
}

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

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

    单例类 描述 指在整个系统生命期中,一个类最多只能有一个实例(instance)存在,使得该实例的唯一性(实例是指一个对象指针)  , 比如:统计在线人数 在单例类里,又分为了懒汉式和饿汉式,它们的区 ...

  2. C++解析(27):数组、智能指针与单例类模板

    0.目录 1.数组类模板 1.1 类模板高效率求和 1.2 数组类模板 1.3 堆数组类模板 2.智能指针类模板 2.1 使用智能指针 2.2 智能指针类模板 3.单例类模板 3.1 实现单例模式 3 ...

  3. C++中的单例类模板

    1,本节课讲述单例类模式,实现并抽取相关代码实现单例类模板,在以后开发工作 中,如果想要使用单例模式,那么直接使用今天开发的单例类模板就可以: 2,需求的提出: 1,在架构设计时,某些类在整个系统生命 ...

  4. c++ 中的单例类模板的实现方法

    1.什么是单例模式 在架构设计时,某些类在整个系统生命周期中最多只能有一个对象存在 ( Single Instance ).如超市收银系统,其外观主要由显示器(1个).扫描枪(1个).收款箱(1个)组 ...

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

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/47335197 ...

  6. C#单例类的实现

    C#单例类的实现 单例类保证一个类全局仅有一个实例,并提供一个全局访问点,由于只能生成一个实例,因此我们必须把构造函数设为私有函数以禁止他人创建实例. 实现1:懒汉式,线程不安全 该实现没有额外开销, ...

  7. Unity 游戏框架搭建 2018 (二) 单例的模板与最佳实践

    Unity 游戏框架搭建 2018 (二) 单例的模板与最佳实践 背景 很多开发者或者有经验的老手都会建议尽量不要用单例模式,这是有原因的. 单例模式是设计模式中最简单的也是大家通常最先接触的一种设计 ...

  8. Unity 游戏框架搭建 (十三) 无需继承的单例的模板

    之前的文章中介绍的Unity 游戏框架搭建 (二) 单例的模板和Unity 游戏框架搭建 (三) MonoBehaviour单例的模板有一些问题. 存在的问题: 只要继承了单例的模板就无法再继承其他的 ...

  9. 游戏设计模式——C++单例类

    前言: 本文将探讨单例类设计模式,单例类的懒汉模式/饿汉模式,单例类的多线程安全性,最后将利用C++模板减少单例类代码量. 本文假设有一个Manager管理类,并以此为探究单例类的设计模式. 懒汉模式 ...

随机推荐

  1. Failed to start component [StandardEngine[Catalina].stadardHost[loclahost].StandardContent[/GarageMgtB]]

    错误如图: 新导入的一个web工程,在problems中显示错误是:Target runtime Apache Tomcatv8.0 is not defined. 终于找到解决方法.方法是:在工程目 ...

  2. test-ipv6

    http://test-ipv6.com/ ! 你的公网 IPv4 地址是 89.42.31.211! 你的公网 IPv6 地址是 2001:ac8:21:8::376e:989b! 你已接入 IPv ...

  3. hdu1686 Oulipo KMP/AC自动机

    The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e ...

  4. 浅谈malloc()和free()工作原理

    编程之路刚刚开始,错误难免,希望大家能够指出.  malloc()和free()是我经常需要用到的函数,一般情况下,C程序使用malloc()在堆上分配内存,free()释放内存,两者的参数和返回值就 ...

  5. 【BZOJ3894】文理分科

    最小割劲啊 原题:  文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠 结过)  小P所在的班级要进行文理分科.他的班级可以用一个n*m的矩阵进行 描述,每个格子代表一个同学的座位.每位 ...

  6. 芯灵思SInA33开发板怎样烧写镜像文件

    上一节已经制作好了linux镜像文件,现在将它烧入开发板中需要的工具有 * SINLINX-A33_qt-4.8.7_lcd1024x600_v3.1 #镜像文件 * PhoenixSuit #烧写工 ...

  7. RPC简介及框架选择

    简单介绍RPC协议及常见框架,对比传统restful api和RPC方式的优缺点.常见RPC框架,gRPC及序列化方式Protobuf等 HTTP协议 http协议是基于tcp协议的,tcp协议是流式 ...

  8. docker 学习资料

    docker 学习资料 学习资料 网址 Docker 教程(菜鸟教程) http://www.runoob.com/docker/docker-tutorial.html

  9. centos7 pptp 安装

    1  安装 ppp yum install -y ppp 2 安装 pptpd yum install -y pptpd 3 编辑/etc/pptpd.conf 在最后 添加 localip 192. ...

  10. MySQL 的日期类型有5个,分别是: date、time、year、datetime、timestamp。

    类型 字节 格式 用途 是否支持设置系统默认值 date 3 YYYY-MM-DD 日期值 不支持 time 3 HH:MM:SS 时间值或持续时间 不支持 year 1 YYYY 年份 不支持 da ...