Springboot 细胞因子 http angularjs loops path menu laravel4 null Zeptojs css最后一个子元素 oracle查看数据库状态 linux关闭mysql bootstrap滚动条 python的random模块 java9 java例子 java获取月份 java开发接口 javastring类型 java的map java遍历文件夹下所有文件 java入门基础 java停止线程 网页游戏开发入门 一键刷入recovery vbscript程序员参考手册 atq subprocess phpqrcode ps校正倾斜照片 刺激战场脚本 思源黑体cn 野德天赋 小米手环充电多久 我的世界透视 ps水平翻转快捷键 如何用ai设计字体 小米9截屏 flushdns
当前位置: 首页 > 学习教程  > 编程语言

[C++][设计模式] 单例设计模式

2021/1/13 19:40:11 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

效果: 内存中只能有一份对象,即类在内存中只能有1个实例(通过该类只能创建一个对象) 实现步骤: 将构造函数私有化。在类中定义一个静态的指针变量(一般设为私有),并在类外初始化为…

效果:

  • 内存中只能有一份对象,即类在内存中只能有1个实例(通过该类只能创建一个对象)

实现步骤:

  1. 将构造函数私有化。
  2. 在类中定义一个静态的指针变量(一般设为私有),并在类外初始化为空
  3. 定义一个返回值为类指针的静态成员函数,如果2中的指针对象为空,则初始化对象,以后再有对象调用该静态成员函数的时候,不再初始化对象,而是直接返回对象,保证类在内存中只有一个实例。

解释:

  • 构造函数私有化是为了保证除了自己定义的类的静态方法(此文章中的static Singleton * getInstance()),其他方式均不能构造类的实例,间接保证类在内存中只有一个实例。

代码:

#include <iostream>

using std::cout;
using std::endl;

class Singleton
{
public:
    static Singleton * getInstance()
    {
        if(nullptr==_pInstance)  //若指针对象为空,则初始化对象
        {
            _pInstance=new Singleton();
        }
        return _pInstance;
    }

    static void destory()
    {
        if(_pInstance)
        {
            delete  _pInstance;
        }
    }

    void print()
    {
        cout << "data= " << _data << endl;
    }

private:
    Singleton()  //构造函数私有化
    : _data(0)
    {
        cout << "Singleton()" << endl;
    }

    ~Singleton()
    {
        cout << "~Singleton()" << endl;
    }

private:
    int _data;
    static Singleton *_pInstance;  //静态指针变量
};

Singleton *Singleton::_pInstance=nullptr;  //类外初始化静态指针变量

int main()  //测试
{
    Singleton *p1=Singleton::getInstance();
    Singleton *p2=Singleton::getInstance();

    cout<<"p1= "<<p1<<endl
        <<"p2= "<<p2<<endl;

    Singleton::destory();

    return 0;
}

结果:
在这里插入图片描述
分析:

  • 指针p1跟p2指向的内存空间地址相同,即整个内存中类的实例只有一个。

2021/1/13


本文链接: http://www.dtmao.cc/news_show_600147.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?