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

描述

指在整个系统生命期中,一个类最多只能有一个实例(instance)存在,使得该实例的唯一性(实例是指一个对象指针)  , 比如:统计在线人数

在单例类里,又分为了懒汉式和饿汉式,它们的区别在于创建实例的时间不同:

  • 懒汉式 : 指代码运行后,实例并不存在,只有当需要时,才去创建实例(适用于单线程)
  • 饿汉式 : 指代码一运行,实例已经存在,当时需要时,直接去调用即可(适用于多线程)

用法

  • 将构造函数的访问属性设置为private,
  • 提供一个GetInstance()静态成员函数,只能供用户访问唯一一个实例.
  • 定义一个静态成员指针,用来供用户获取
  • 重载 (=)赋值操作符以及拷贝构造函数,并设为private, 避免对象间拷贝,复制.

初探单例类-懒汉式:

运行打印:

从打印结果可以看出,该指针对象指向的都是同一个地址,实现了一个类最多只能有一个实例(instance)存在.

注意:由于实例(instance),在系统生命期中,都是存在的,所以只要系统还在运行,就不需要delete

上面的懒汉式如果在多线程情况下 ,多个Csingleton指针对象同时调用getInstance()成员函数时,由于m_pInstance=NULL,就会创建多个实例出来.

所以,在多线程情况下,需要使用饿汉实现

代码如下:

写CSingleton.h

当我们需要这个单例类模板时,只需要在自己类里通过friend添加为友元即可,

写main.cpp

运行打印:



文章来源:https://www.cnblogs.com/lifexy/p/8810877.html

原文地址:https://www.cnblogs.com/xiongjim/p/9674182.html

时间: 2024-11-05 17:21:33

28.C++- 单例类模板(详解)的相关文章

C++之单例类模板

单例类模板:一个类只能有一个对象,比如超市收银系统中清点物品的仪器只有一个 设计思路: 1.构造函数,拷贝构造函数必须设计为private,防止自己生成新的对象 2.且类的指针要设计为static类型,并初始化为NULL 3.当需要使用对象时(即访问类指针) 空值:则重新分配对象 非空值:返回当前所指向的对象 代码如下 1 #include<iostream> 2 3 using namespace std; 4 5 //扫描物品的工具类 6 class SObject 7 { 8 priva

第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 的值,如果是空值,那

单例的使用详解

单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例:二是它必须自行创建这个实例:三是它必须自行向整个系统提供这个实例. 2.单例模式的优点: 1.实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例. 2.灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程 IOS中的

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

Django框架模板详解

Django模板详解 模板使用 模板基本由两个部分组成,一是HTML代码,二是逻辑控制代码. 逻辑控制的实现又基本由三个部分组成: 1. 变量的使用 {{ person_name }} #使用双大括号来引用变量 2. tag的使用 {% if ordered_warranty %} #使用大括号和百分号的组成来表示使用Django提供的 template tag {% for item in item_list %} <li>{{ item }}</li> {% endfor %}

c++:自己动手实现线程安全的c++单例类

前段时间使用c++做项目开发,需要根据根据配置文件路径加载全局配置文件,并对外提供唯一访问点.面对这样一个需求,自然的就想到了使用单例模式来创建一个单例配置对象,供外部调用.一开始想使用boost中自带的单例类来实现,但是遗憾的是,boost中的的单例类好像只能使用无参的类构造函数,而我希望将配置文件路径作为单例配置对象的构造函数参数,此外正好借此机会使用c++自己动手实现一个单例类. 1.线程安全的c++单例类 实现线程安全的c++单例类,主要要实现以下几点:1)构造函数私有化,即构造函数.拷

创建一个单例类

关于单例的概念此处不做表述,直接上代码演示如何创建一个单例类. 1 #import <Foundation/Foundation.h> 2 3 @interface MJDemo : NSObject 4 5 + (instancetype)sharedDemo; 6 7 @end 8 9 10 #import "MJDemo.h" 11 12 @implementation MJDemo 13 14 //在iOS中所有对象分配内存空间,最终都会调用allocWithZon