C++之单例类模板
单例类模板:一个类只能有一个对象,比如超市收银系统中清点物品的仪器只有一个
设计思路:
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++之单例类模板的更多相关文章
- 28.C++- 单例类模板(详解)
单例类 描述 指在整个系统生命期中,一个类最多只能有一个实例(instance)存在,使得该实例的唯一性(实例是指一个对象指针) , 比如:统计在线人数 在单例类里,又分为了懒汉式和饿汉式,它们的区 ...
- C++解析(27):数组、智能指针与单例类模板
0.目录 1.数组类模板 1.1 类模板高效率求和 1.2 数组类模板 1.3 堆数组类模板 2.智能指针类模板 2.1 使用智能指针 2.2 智能指针类模板 3.单例类模板 3.1 实现单例模式 3 ...
- C++中的单例类模板
1,本节课讲述单例类模式,实现并抽取相关代码实现单例类模板,在以后开发工作 中,如果想要使用单例模式,那么直接使用今天开发的单例类模板就可以: 2,需求的提出: 1,在架构设计时,某些类在整个系统生命 ...
- c++ 中的单例类模板的实现方法
1.什么是单例模式 在架构设计时,某些类在整个系统生命周期中最多只能有一个对象存在 ( Single Instance ).如超市收银系统,其外观主要由显示器(1个).扫描枪(1个).收款箱(1个)组 ...
- Unity Singleton 单例类(Unity3D开发之二十)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/47335197 ...
- C#单例类的实现
C#单例类的实现 单例类保证一个类全局仅有一个实例,并提供一个全局访问点,由于只能生成一个实例,因此我们必须把构造函数设为私有函数以禁止他人创建实例. 实现1:懒汉式,线程不安全 该实现没有额外开销, ...
- Unity 游戏框架搭建 2018 (二) 单例的模板与最佳实践
Unity 游戏框架搭建 2018 (二) 单例的模板与最佳实践 背景 很多开发者或者有经验的老手都会建议尽量不要用单例模式,这是有原因的. 单例模式是设计模式中最简单的也是大家通常最先接触的一种设计 ...
- Unity 游戏框架搭建 (十三) 无需继承的单例的模板
之前的文章中介绍的Unity 游戏框架搭建 (二) 单例的模板和Unity 游戏框架搭建 (三) MonoBehaviour单例的模板有一些问题. 存在的问题: 只要继承了单例的模板就无法再继承其他的 ...
- 游戏设计模式——C++单例类
前言: 本文将探讨单例类设计模式,单例类的懒汉模式/饿汉模式,单例类的多线程安全性,最后将利用C++模板减少单例类代码量. 本文假设有一个Manager管理类,并以此为探究单例类的设计模式. 懒汉模式 ...
随机推荐
- css实现两栏布局,左侧固定宽,右侧自适应的7中方法
一个面试会问的问题,如何实现两个盒子,左侧固定宽度,右侧自适应. 1.利用 calc 计算宽度的方法 css代码如下: .box{overflow: hidden;height: 100px;marg ...
- putty 、xshell的使用 和 putty 、xshell、 shell 间免密登陆
相关软件的使用: ######################################################################### 以上是相关软件的使用! 以下是免密 ...
- Linux常用命令详解-目录文件操作命令
来源:https://www.linuxidc.com/Linux/2018-04/151801.htm 现实中,服务器(包含Linux,Unix,Windows Server)一般都摆放在机房里,因 ...
- java 彻底理解 byte char short int float long double
遇到过很多关于 数值类型范围的问题了,在这做一个总结,我们可以从多方面理解不同数值类型的所能表示的数值范围 在这里我们只谈论 java中的数值类型 首先说byte: 这段是摘自jdk中 Byte.ja ...
- Go Example--方法
package main import "fmt" //定义结构体 type rect struct { width,height int } //定义结构体指针的方法 func ...
- day 06Hadoop
更换虚拟机以后操作的步奏1.到每一台机器上修改ip地址 ,然后修改hosts1.5 给每台机器配置免密码登录 2.修改hadoop 的配置文件,发送到每台机器上3.启动dfs start-dfs.sh ...
- linux二进制/十六进制日志文件如何查看和编辑
使用cat查看二进制,显示乱码 [root@localhost ~]# cat /var/log/wtmp ~~~reboot3.10.0-514.el7.x86_64 �YO#5~~~runleve ...
- Map接口的使用
1.Map定义: Collection是孤立存在的,向集合中存储元素是一个一个放,Map中的集合 存储是成对,通过键找到值,键和值是映射关系. 2.注意: Map集合中不能包含重复的键,但是可以包含重 ...
- Laya播放unity特效
杭州-fun 2017/12/5 20:47:12 其实网上就有你搜下就有了现成的脚本,设置帧数和截取时间它会截屏并保存成贴图导入laya生成atlas就能用了 就是unity的截屏功能 就 ...
- CSS矩形盒子的四个边界
CSS下这些矩形盒子由标准盒模型描述.这个模型描述元素内容占用空间.盒子有四个边界:外边距边界margin edge, 边框边界border edge, 内边距边界padding edge 与 内容边 ...