如何实现单例模式?

news/2024/12/20 21:58:31/

什么是单例模式

单例模式是一种创建型的设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例

单例模式在整个程序运行期间只创建一个对象,常用于管理全局资源,实现日志系统等场景

将构造函数私有化,拷贝构造函数和赋值运算符删除

class Singleton{
private:Singleton() {}Singleton(const Singleton& other) = delete; //禁止使用Singleton& operator=(const Singleton&object) = delete;  //禁止使用
};

在C++中如何实现单例模式

懒汉式实现:在第一次调用获取实例的方法时才创建实例。这种实现方式可能存在线程安全问题,需要进行同步处理。

class Singleton{
private:static Singleton* instance;Singleton(){}
public:static Singleton* getinstance(){if(instance==nullptr){instance=new Singleton();        }return instance;}                
};
Singleton* Singleton::instance=nullptr;

static作用:在这个代码中,static关键字用于声明instance成员变量为静态变量。静态变量是属于类而不是类的实例的变量,因此在整个程序运行期间只会有一个m_instance_ptr变量的实例。这使得在getInstance()方法中可以对该变量进行检查,确保只创建一个Singleton类的实例。

饿汉式实现:在程序启动时就创建实例。这种方式时线程安全的,但可能会在不需要实例的时候就创建它

class Singleton{
private:static Singleton* instance;Singleton(){}
public:static Singleton* getinstance(){return instance;}                
};
Singleton* Singleton::instance=new Singleton();


http://www.ppmy.cn/news/1556742.html

相关文章

从零开始:PHP基础教程系列-第11篇:使用Composer管理依赖

从零开始:PHP基础教程系列 第11篇:使用Composer管理依赖 一、什么是Composer? Composer是PHP的依赖管理工具。它允许开发者轻松地管理项目中的库和依赖项,自动下载和更新所需的包,以及处理版本冲突。Composer使得在…

游戏引擎学习第48天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾 我们正在进行碰撞检测的工作,昨天我们几乎完成了一部分代码。由于一些原因,昨天的直播结束时未能完成所有内容。今天我们将继续进行,首先回顾一下之前的进展。我们需要让角色能够正确地与…

《Python 解释器和 PyCharm 详解》

一、引言 Python 是一种广泛使用的高级编程语言,具有简洁、易读、可扩展性强等特点。在使用 Python 进行开发时,需要了解 Python 解释器和集成开发环境(IDE)的作用和特点。本文将详细介绍 Python 解释器和 PyCharm,帮助…

Unity读取、新建Excel表格

把dll资源解压后,全部导入到unity中的Plugins文件下面 资源放在标题下方,可以自行下载 使用教程 引入命名空间 using SimpleExcel;。这个命名空间下主要有两个类:WorkBook和Sheet。WorkBook用于对整个excel文件的操作,如创建、打开…

MySQL基础笔记(二)

在此特别感谢尚硅谷-康师傅的MySQL精品教程 获取更好的阅读体验请前往我的博客主站! 如果本文对你的学习有帮助,请多多点赞、评论、收藏,你们的反馈是我更新最大的动力! 多表查询 多表查询,也称为关联查询,指两个或更…

Yolov8源码分析

1、目录介绍 主要目录ultralitics(重点) 1、assets目录 这个文件保存了YOLO历史上可以说是最经典的两张图片,供大家测试程序来使用的。 2、cfg 这个文件下面保存了我们的模型配置文件,cfg目录是项目配置的集中地,其…

有关异步场景的 10 大 Spring Boot 面试问题

本文将探讨与 Spring Boot 中的异步场景相关的十大面试问题。这些问题涵盖了广泛的主题,从基本的注释和配置到高级概念,例如使用 Spring WebFlux 进行反应式编程。在本文结束时,您将对如何利用 Spring Boot 中的异步编程来构建强大而高效的应…

C语言(指针练习2)

编写函数,要求用指针做形参&#xff0c;分别实现以下功能&#xff1a; &#xff08;1&#xff09;求一个字符串长度 &#xff08;2&#xff09;在一个字符 串中统计大写字母的个数 &#xff08;3&#xff09;在一个字符串中统计数字字符的个数 #include <stdio.h>int str…