单例模式设计(面试题)

news2024/9/21 22:41:42

1、static修饰变量规则

static修饰的静态成员属于 类而不是对象,所有的对象共享一份静态成员数据,所以不占用类的空间

static修饰的成员,定义类的时候,必须分配空间

static修饰的静态成员数据 必须类中定义 类外初始化

静态成员变量可以直接通过类名访问

静态成员函数可以直接通过类名访问

静态成员函数只能操作静态成员数据

静态成员函数不能操作非静态成员变量,因为静态成员函数属于整个类,而 this 保存的是当前实例化对象的地址,所以就造成了矛盾,如果静态成员函数属于某一个实例化对象,那么静态成员函数就能操作非静态成员变量

静态成员数据是先于实例化对象存在的,因为只有这样所有的对象才能共享一份静态成员数据

2、单例模式简介

单例模式是一种常用的软件设计模式,在它的核心结构中只包括一个被称为单例的特殊类。通过单例模式模式可以保证系统中一个类只有一个实例,而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果在系统中希望某个类的对象只能存在一个,单例模式就是最好的解决方案!

3、创建单例模式的过程

a、防止该类在外界实例化对象,构造函数私有化

private:              //这样保证外界一个对象都不能实例化
    //无参构造
    SingleMode(){
    }
    //深拷贝
    SingleMode(const SingleMode &ob){}
    //析构函数
    ~SingleMode(){
    }

b、定义一个静态的指针变量,保存唯一的实例对象的地址,而且该地址还不能被修改

private:
    //保存唯一实例的地址
    static SingleMode * const p;

c、类外初始化,给唯一实例对象分配空间

SingleMode * const SingleMode::p = new SingleMode;

该程序段相当于在类内部执行的,只不过是通过 作用域 SingleMode::p 放到了类外,只有这样才能实现整个类的空间分配

为什么是类外初始化?

因为只有将整个类的程序执行完,才能知道给该类分配多大的空间

d、获得唯一的实例地址

public:
    //获得唯一的实例地址
    static SingleMode * getAddress(void){
        return p;
    }

e、用户自定义的操作

public:
    //获得唯一的实例地址
    static SingleMode * getAddress(void){
        return p;
    }
    //用户自定义的操作函数
    void print_single(char *str){
        cout<<"打印:"<<str<<endl;
    }

d、获取单例的地址

//获取单例的地址
   SingleMode *p1 = SingleMode::getAddress();
   p1->print_single("p1");
   SingleMode *p2 = SingleMode::getAddress();
   p2->print_single("p2");
   cout<<p1<<endl;
   cout<<p2<<endl;

4、完整的代码

#include <iostream>
#include <string.h>
#include <stdlib.h>

using namespace std;
class SingleMode
{
private:
    //无参构造
    SingleMode(){
    }
    //深拷贝
    SingleMode(const SingleMode &ob){}
    //析构函数
    ~SingleMode(){
    }
private:
    //保存唯一实例的地址
    static SingleMode * const p;
public:
    //获得唯一的实例地址
    static SingleMode * getAddress(void){
        return p;
    }
    //用户自定义的操作函数
    void print_single(char *str){
        cout<<"打印:"<<str<<endl;
    }
};
SingleMode * const SingleMode::p = new SingleMode;
int main(int argc, char *argv[])
{
    //获取单例的地址
   SingleMode *p1 = SingleMode::getAddress();
   p1->print_single("p1");
   SingleMode *p2 = SingleMode::getAddress();
   p2->print_single("p2");
   cout<<p1<<endl;
   cout<<p2<<endl;
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/359430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS7安装MariaDB步骤

文章目录1.配置MariaDB yum源2.安装MariaDBMariaDB数据库管理系统是MySQL的一个分支&#xff0c;主要由开源社区在维护&#xff0c;采用GPL授权许可。 MariaDB的目的是完全兼容MySQL&#xff0c;包括API和命令行&#xff0c;使之能轻松成为MySQL的代替品。 CentOS 6 或早期的版…

0基础成功转行Python自动化测试工程师,年薪30W+,经验总结都在这(建议收藏)

两年前的决定我觉得还是非常正确的&#xff0c;就是自学了python&#xff0c;然后学习了自动化测试、性能测试、框架、持续集成&#xff0c;同时也把前面的软件测试基础知识全部补全了。目前的收入还比较满意&#xff0c;月入2W&#xff08;仅代表个人收入&#xff09;,13薪&am…

技术团队管理要求 网文节选要点,内部培训用

业务线开发级别分布 技术开发 高级技术开发 技术专家 p6p7 团队专家 p7 单团队 10人小团队 领域专家 p8 多团队 2-5 10人小团队&#xff0c;技术顶峰&#xff0c;业务和管理能力都不能弱。 商业或者业务leader p8 p9&#xff0c;商业模式设计和商业成功。业务能力和管…

用神经辐射场在大场景中漫游

目录 前言 介绍 背景 改进 NeRF 以编码大型场景 在训练数据中获得足够的观点 动态对象移除 应用 结论 参考 前言 最近一直在做NeRF相关工作&#xff0c;偶然看到台湾智慧实验室一篇文章&#xff08;Hovering Around a Large Scene with Neural Radiance Field Taiwan …

系列三、docker相关指令

一、docker指令 1.1、查看docker详细信息 docker info 1.2、查看docker版本 docker version 1.3、帮助命令 docker --help 二、images指令 2.1、查看本地仓库中有哪些镜像 docker images 2.2、下载新的镜像 # 语法 docker pull 镜像名:版本号# 案例 docker pull mysql…

详解CanNM配置-CanNmPnEnabled参数有什么用?

总目录链接==>> AutoSAR入门和实战系列总目录 @学前问答: CanNmPnEnabled是什么含义? CanNmPnEnabled会对接收NM PDU 有什么影响 CanNmAllNmMessagesKeepAwake是干嘛的? 文章目录 1 CanNmPnEnable配置解析2 答疑解析1 CanNmPnEnable配置解析 CanNmPnEnable配置的参…

camera 硬件基本知识

参考博客&#xff1a;1.【Camera专题】Qcom-你应该掌握的Camera调试技巧2_c枫_撸码的日子的博客-CSDN博客_outputpixelclock 2.浩瀚之水_csdn的博客_CSDN博客-深度学习,嵌入式Linux相关知识汇总,Caffe框架领域博主 3.一个早起的程序员的博客_CSDN博客-FPGA,PCIe应用实战,PCI-E…

windows 系统 同时安装启动 多个版本的 MySQL

目录一 安装MySQL8.01.0 下载MySQL8.0版本1.1 配置配置文件1.2 注册服务1.3 修改密码二 安装MySQL5.72.0 下载MySQL5.7版本2.1 配置配置文件2.2 注册服务2.3 启动服务并修改密码在同一台 windows 上安装不同版本的MySQL, 这里表示环境干净未安装MySQL的教程.如安装过请先百度搜…

jvm监控进程内存分布

线上经常内存爆满&#xff0c;导致设备掉线&#xff0c;进行排查14894 进程ip Pidjstat -gcutil 14894 1000 -1 jvm 内存分布%jmap -histo:live 14894 | head -50 jvm 存活的实例对象 前50个jmap -histo:live 14894 >> heap.txt jvm 存活的实例对象 输出成文件jmap -dump…

操作系统线程

进程那一章&#xff0c;我们留下了一个问题 第一个cpu调用进程&#xff0c;进程调用i/o设备&#xff0c;主动进入ready 队列 第二个cpu将程序执行时间平均分时&#xff0c;进程执行时间到 第三个fork函数&#xff0c;我们上一章的lab有实践&#xff0c;可以看出是父进程主动条用…

数字化转型下的园区运营如何才能智慧起来?推荐快鲸智慧园区系统

在数字化转型深入推动的背景下&#xff0c;“大数据”、“互联网”等技术不断推动着传统产业&#xff0c;园区运营所产生的业务数据与日俱增。数据作为数字化转型的核心要素&#xff0c;如果不对其进行分析整理&#xff0c;从中提取有价值的信息&#xff0c;数据的价值便无法得…

CS144-Lab1

实验架构 TCP实施中模块和数据流的排列 : [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pmRfy6Va-1676857163260)(null)] 字节流是Lab0。TCP的工作是通过不可靠的数据报网络传输两个字节流(每个方向一个)&#xff0c;以便写入连接一侧套接字的字…

在superset中快速制作报表或仪表盘

在中小型企业&#xff0c;当下需要快速迭代、快速了解运营效果的业务&#xff0c;急需一款开源、好用、能快速迭代生产的报表系统。 老板很关心&#xff0c;BI工程师很关心&#xff0c;同时系统开发人员也同样关心&#xff0c;一个好的技术选型往往能够帮助公司减少很多成本&a…

软件持续测试的未来题】

测试是软件开发生命周期(SDLC)的重要组成部分。SDLC 的每个阶段都应包含测试&#xff0c;以获得更快的反馈并提高产品质量。如果以有效的方式实施和使用测试自动化&#xff0c;那么它可以为您带来出色的结果&#xff0c;而持续测试是正确的方法.。预计在2018-2023 年的预测期内…

CCNP350-401学习笔记(251-300题)

251、 Which IPv6 OSPF network type is applied to interface Fa0/0 of R2 by default? A. multipointB. broadcast C. Ethernet D. point-to-point 252、Which EIGRP feature allows the use of leak maps? A. neighborB. Stub C. offset-list D. address-family 253、W…

IMS应用领域|IMS连接器系统使自动驾驶成为可能

IMS连接器系统使自动驾驶成为可能极高的创新力和绝对的产品质量&#xff1a;作为高频接插件接口的创新性开发合伙人&#xff0c;我们的产品满足汽车工业对信息娱乐、娱乐、远程信息处理技术、车载电脑和智能汽车天线等不同产品解决方案的多种要求。我们为确保系统的可靠性做出了…

【学习笔记】Docker(一)

Docker为什么会出现&#xff1f;问题&#xff1a;环境配置最初开发上线都需要配置&#xff0c;并且非常麻烦。每一个机器都需要部署环境——费时费力、我在我的电脑上可以运行、版本更新&#xff0c;导致服务不可用传统&#xff1a;开发打包jar包交给运维来做现在&#xff1a;开…

面试经常被问悲观锁和乐观锁?什么是cas?来我花3分钟时间告诉你

锁大家都知道吧&#xff0c;多线程访问资源会存在竞争&#xff0c;那么就需要加锁进而让多个线程一个一个访问。 比如有一个房间&#xff0c;一次只能进一个人&#xff0c;现在有十个人都想进去怎么办&#xff1f; 对&#xff0c;加锁。拿一把钥匙&#xff0c;谁抢到钥匙谁就…

5.4 BGP地址聚合

5.3.1配置BGP地址聚合 1. 实验目的 熟悉BGP地址聚合的应用场景掌握BGP地址聚合的配置方法2. 实验拓扑 实验拓扑如图5-4所示: 图5-4:配置BGP地址聚合 3. 实验步骤 (1)配置IP地址 R1的配置 <Huawe…

skywalking window版使用

文章目录 目录 文章目录 前言 一、skywalking 二、使用步骤 2.1 使用mysql持久化监控数据 2.2 接入到idea的单个微服务和多个微服务 2.3 自定义skywalking的链路追踪 总结 前言 skywalking是一个国产开源框架&#xff0c;是分布式系统的应用程序性能监视工具&#xff0c;专为…