码农知识堂 - 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. }

  • 相关阅读:
    《SQLi-Labs》04. Less 23~28a
    Android中View的工作流程之draw过程
    [图论] 6-1-1 网络最大流
    如何把握好Shopee节日大促?Shopee77大促营销策略
    MyBatis Plus 实现获取自动生成主键值的方法
    Java 华为真题-黄金宝箱最大值
    每天一个狗命小技巧:当你记住这10条Linux命令后,你就再也不会坐穿某个地方咯(狗头)
    LeetCode-1774. 最接近目标价格的甜点成本【数组,背包问题,优化暴力,回溯】
    银行卡二元素api接口是怎么完成验证的?
    leetcode55.跳跃游戏 【贪心】
  • 原文地址:https://blog.csdn.net/u010164190/article/details/128173447
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号