码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++之Singleton单例和单例模板类讲解


    目录

    1.概述

    2.单例模式的特征

    3.单例模式:程序例子

    3.单例模式模板类:程序例子


    1.概述

    Singleton 是对全局变量的取代策略。
    <1>.作用:保证一个类只能有一个实例,并提供一个全局唯一的访问点。

    <2>.仅有一个实例:通过类的静态成员变量来体现。
    <3>.提供访问它的全局访问点:访问静态成员函数来体现。

    2.单例模式的特征

    <1>.它有一个指向唯一实例的静态指针,并且是私有的;

    <2>.它有一个公有的函数,可以获取这个唯一的实例,并且在需要的时候创建该实例;

    <3>.它的构造函数是私有的,这样就不能从别处创建该类的实例。

    <4>.Singleton不可以被实例化,因此我们将其构造函数声明为protected或者直接声明为private。

    3.单例模式:程序例子

    1. #include
    2. using namespace std;
    3. class Singleton{
    4. private:
    5. //静态成员,保存对象的唯一实例
    6. static Singleton* pInstance;
    7. //私有化构造函数,使其无法在类外实例化
    8. Singleton();
    9. public:
    10. static Singleton* Instance();
    11. void Destroy();
    12. };
    13. Singleton* Singleton::pInstance = NULL;
    14. //构造函数
    15. Singleton::Singleton(){
    16. cout<< "Singleton..." << endl;
    17. }
    18. Singleton* Singleton::Instance(){
    19. if(NULL == pInstance)
    20. pInstance = new Singleton();
    21. return pInstance;
    22. }
    23. void Singleton::Destroy(){
    24. delete pInstance;
    25. pInstance = NULL;
    26. cout<< "Destroy..." << endl;
    27. }
    28. int main(){
    29. //通过全局访问点获取实例
    30. Singleton* ps = Singleton::Instance();
    31. ps->Destroy();
    32. return 0;
    33. }

    3.单例模式模板类:程序例子

    1. #include
    2. #include
    3. using namespace std;
    4. template<typename T>
    5. class Singleton {//定义类Singleton
    6. static T* c_instance;
    7. public:
    8. static T* GetInstance();
    9. private:
    10. int m_count;
    11. };
    12. template<typename T>
    13. T* Singleton::c_instance = NULL;//定义c_instance全局变量
    14. template<typename T>
    15. T* Singleton::GetInstance() {//实现单例模式函数
    16. if(c_instance == NULL)
    17. c_instance = new T();
    18. return c_instance;
    19. }
    20. class SObject{
    21. //友元类,当前类SObject需要使用Singleton类单例模式,所以定义友元类
    22. friend class Singleton;
    23. // SObject(const SObject&);
    24. // SObject& operator= (const SObject&);
    25. SObject(){
    26. printf("xxx----->len = %d\n",__LINE__);
    27. }
    28. public:
    29. void print(){
    30. cout << "this = " << this << endl;
    31. }
    32. };
    33. int main(){
    34. //将SObject类传入单例模式的类模板,然后调用GetInstance()获取类的实例化
    35. SObject* s = Singleton::GetInstance();
    36. s->print();//打印this指针的地址,查看当前实例化是否成功
    37. return 0;
    38. }

  • 相关阅读:
    一道好题——分治
    【深入浅出Spring原理及实战】「IOC容器初始化」彻底让你明白和理解运行原理和源码流程
    IPSEC VXN 及 NAT BYPASS配置及详解
    Hexagon_V65_Programmers_Reference_Manual(15)
    用户忠诚度衡量指标丨利用净推荐值减少流失
    【论文阅读】【三维目标检测】Camera-Lidar融合的3D目标检测网络
    初学Matlab第二天
    LeetCode 热题 HOT 100 第五十八天 226. 翻转二叉树 简单题 用python3求解
    数值法求解微分博弈问题(〇)——定义
    第14章_视图
  • 原文地址:https://blog.csdn.net/u010164190/article/details/128173447
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号