博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式
阅读量:5070 次
发布时间:2019-06-12

本文共 862 字,大约阅读时间需要 2 分钟。

一. 懒汉模式-线程不安全

class CSingleton{    private:     static CSingleton* pInstance;    CSingleton()//构造函数私有化,封死外界使用new创建实例的可能    {    }    public:    static CSingleton* getInstance()//实例化本类的唯一全局入口    {        if(NULL == pInstance)        {            pInstance = new CSingleton();        }               return pInstance;    }};

问题:单例模式中构造函数为什么必须是私有的?

私有构造器,可以减少错误的使用和猜测而定的规则。构造函数用于实例时,自动调用为成员变量分配空间。
在实际开发过程中,由于调用了一个单例模式,该单例的构造方法是public的。在调用时候,采用了Singleton singleton = new Singleton();调用,这样的结果就是导致不断的初始化Singleton类,内存很快会耗尽,应用速度变慢。?
所以,单例模式的构造方法最好定义private,并且通过Singleton.getInstance()调用。

问题: 为什么单例模式的实例要设置为静态的?

从语义上讲,类的静态成员变量是所有对象共享的,而单例模式就是为了让该类所有实例共享同一个对象。
从语法上讲,常见的单例模式都是通过一个静态方法返回其单例,而静态方法的内部不能直接使用非静态变量。

问题:为什么getInstance要设置成静态函数?
静态方法可以在实例化之前,就通过类名调用,此函数用于构造单利,会早于单利生成调用。

也就是说它的返回值是当这个函数首次被访问时被创建的。(懒汉)

 

转载于:https://www.cnblogs.com/shijianchuzhenzhi/p/5861008.html

你可能感兴趣的文章
poj1611 简单并查集
查看>>
Ubuntu 14.04下安装CUDA8.0
查看>>
跨平台开发 -- C# 使用 C/C++ 生成的动态链接库
查看>>
C# BS消息推送 SignalR介绍(一)
查看>>
WPF星空效果
查看>>
WPF Layout 系统概述——Arrange
查看>>
PIGOSS
查看>>
几款Http小服务器
查看>>
openSuse beginner
查看>>
Codeforces 620E(线段树+dfs序+状态压缩)
查看>>
css3动画属性
查看>>
Mongodb 基本命令
查看>>
控制文件的备份与恢复
查看>>
软件目录结构规范
查看>>
mysqladmin
查看>>
解决 No Entity Framework provider found for the ADO.NET provider
查看>>
设置虚拟机虚拟机中fedora上网配置-bridge连接方式(图解)
查看>>
[置顶] Android仿人人客户端(v5.7.1)——人人授权访问界面
查看>>
ES6内置方法find 和 filter的区别在哪
查看>>
Android实现 ScrollView + ListView无滚动条滚动
查看>>