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

设计思路:

  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. lesson3 overfitting -fastai

    VGG:3*3Imagenet:7*7,9*9论文中证明3*3更胜一筹,但是用多少并没有定论微调:删掉模型的中间只对最后一层微调:model.pop,就删掉了最后一层 如何决定训练多少层?:·看论文上 ...

  2. day 019 常用模块

    主要内容: 1模块的简单认识 2collection模块 3time时间模块 4random模块 5os模块 6sys模块 一  模块的简单认识 引入模块的方式:  1import (常见方式) 2 ...

  3. C++学习(九)(C语言部分)之 项目 推箱子游戏

    游戏制作 推箱子 步骤分析 1.模板 2.模板分析 组成元素: 空地 墙 人 目的地 箱子 背景 3.如何操作 通过WASD键盘操作人,推着箱子,到达目的地,游戏结束,如果箱子卡在死角则游戏失败 4. ...

  4. hdu2609 How many 字典树+最小表示法

    Give you n ( n < 10000) necklaces ,the length of necklace will not large than 100,tell meHow many ...

  5. mongodb备份与还原

    mongodb单机: 备份所有的库: mongodump --host 10.10.7.33:27019 --gzip --out /home/mongodb/0415_bf 备份指定的库: mong ...

  6. doubleclick adx note

    1, cid . is billing_id from  Main.html#PRETARGETING otherwise creative id will not upload to  creati ...

  7. 常用C语言time时间函数

    常见的时间函数有time( ).ctime( ).gmtime( ).localtime( ).mktime( ).asctime( ).difftime( ).gettimeofday( ).set ...

  8. Using C++ new() placement in embedded system

    For new(), there are three definition in C++11, which are listed below. throwing (1) void* operator ...

  9. 01炼数成金TensorFlow基本概念

    一.Tensorflow基本概念 1.使用图(graphs)来表示计算任务,用于搭建神经网络的计算过程,但其只搭建网络,不计算 2.在被称之为会话(Session)的上下文(context)中执行图 ...

  10. JSON数据的处理中的特殊字符

    JSON现在是很常见的处理数据的方式了.但由于自己使用的是反射获取数据,必须自己处理特殊字符,但总是发现有一些看不见的字符在前台 var obj = jQuery.parseJSON(msg);会转换 ...