C++笔记-6-c++静态与单例

2023-05-16

C++笔记-6-c++静态与单例


文章目录

  • C++笔记-6-c++静态与单例
  • 前言
  • 一、静态
    • 静态成员变量
    • 静态成员函数
  • 二、单例
    • 饿汉式
    • 懒汉式
  • 总结


前言

自学笔记,没有历史知识铺垫(省略百度部分)C++笔记-6-c++静态与单例


一、静态

静态成员变量

含义:将静态变量作用域,限制在类中共享使用

class Order
{
public:
    // 声明静态成员变量
    static string order_no;
};
// 数据类型 类名::变量名 = 赋值(定义静态成员变量需要在类外)
string Order::order_no = "SS.20221225.001";


int main()
{
	// 通过类名作用访问
    cout << Order::order_no << endl;
}
// 执行结果
SS.20221225.001

静态成员函数

class Order
{

public:
    Order(string order_no_arg, string remark_arg)
    {
        order_no = order_no_arg;
        remark = remark_arg;
    }
    // 静态成员函数
    static void printOrder(Order order)
    {
        cout << "no:" << order.order_no << ",remark:" << order.remark << endl;
    }

private:
    string order_no;
    string remark;
};

int main()
{

    Order order1("SS.20221225.001", "备注1");
    Order::printOrder(order1);

    Order order2("SS.20221225.002", "备注2");
    Order::printOrder(order2);
}

// 执行结果
no:SS.20221225.001,remark:备注1
no:SS.20221225.002,remark:备注2

二、单例

饿汉式


class Singleton
{

public:
    static Singleton &getInstance(void)
    {
        return s_instance;
    }
    void printf()
    {
        cout << flag << endl;
    }

private:
    Singleton(int flag_arg) : flag(flag_arg)
    {
        cout << "饿汉式单例创建成功" << endl;
    }

    Singleton(const Singleton &);

    static Singleton s_instance;

private:
    int flag;
};

Singleton Singleton::s_instance(222);

int main()
{
	cout << "启动程序" << endl;
    Singleton &s1 = Singleton::getInstance();
    Singleton &s2 = Singleton::getInstance();

    s1.printf();
    s2.printf();
    return 0;
}
// 执行结果
饿汉式单例创建成功
启动程序
222
222

懒汉式


class Singleton
{

public:
    static Singleton &getInstance(void)
    {
        // 双重检测
        if (s_instance == nullptr)
        {
            lock_guard<mutex> lck(_mtx); // 加锁, C++ RAII机制,{}结束时,自动解锁
            if (s_instance == nullptr)
            {
                s_instance = new Singleton(345);
            }
        }

        return *s_instance;
    }
    void printf()
    {
        cout << flag << endl;
    }

    void release(void)
    {
        if (s_instance != nullptr)
        {
            delete s_instance;
            s_instance = nullptr;
        }
    }

private:
    Singleton(int flag_arg) : flag(flag_arg)
    {
        cout << "懒汉式单例创建成功" << endl;
    }

    Singleton(const Singleton &);
    ~Singleton()
    {
        cout << "单例销毁成功" << endl;
    }

    static Singleton *s_instance;

private:
    static mutex _mtx;

private:
    int flag;
};

Singleton *Singleton::s_instance = nullptr;
mutex Singleton::_mtx;

int main()
{
    cout << "启动程序" << endl;
    Singleton &s1 = Singleton::getInstance();
    s1.printf();
    s1.release();
    Singleton &s2 = Singleton::getInstance();
    s2.printf();
    s2.release();
    return 0;
}

总结

  1. C++ RAII机制
  2. C++ NULL存在二义性问题,可使用nullptr代表空

本章主要为C++笔记-6-c++静态与单例

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++笔记-6-c++静态与单例 的相关文章

  • 深度学习推荐系统——前深度学习时代

    深度学习推荐系统 前深度学习时代 协同过滤相似度UserCFItemCF矩阵分解矩阵分解的求解过程消除用户和物品打分的偏差矩阵分解的优缺点 逻辑回归特征工程POLY2模型FM模型FFM模型 GDBT 43 LRLS PLM xff08 La
  • 深度学习推荐系统——深度学习时代

    深度学习推荐系统 深度学习时代 AutoRecDeep CrossingNeuralCFPNNWide amp DeepFM与深度学习模型结合FNNDeepFMNFM 注意力机制AFMDIN DIEN总结 AutoRec h r
  • 深度学习推荐系统——Embedding

    深度学习推荐系统 Embedding Embedding概述Word2vecItem2vec Embedding概述 Embedding操作的主要作用是将稀疏向量转换成稠密向量 xff0c 向量之间的距离反映了对象之间的相似性 从另一空间表
  • 堆与栈区别,以及分配内存的快慢

    毫无疑问 xff0c 显然从栈上分配内存更快 xff0c 因为从栈上分配内存仅仅就是栈指针的移动而已 操作系统会在底层对栈提供支持 xff0c 会分配专门的寄存器存放栈的地址 xff0c 栈的入栈出栈操作也十分简单 xff0c 并且有专门的
  • ubuntu下realsence相机通过ros话题直接读取内参

    roslaunch realsense2 camera rs camera span class token punctuation span launch span class token comment 打开相机节点 span rost
  • 语义栅格地图(六) realsense实际测试

    1 在ros中启动realsense 测试输出话题 xff1a roslaunch realsense2 camera rs camera launch 测试输出点云 xff1a roslaunch realsense2 camera rs
  • VINS on RealSense D435i

    关于Realsense D435i运行VINS系列 前言 在SLAM中 xff0c 主要是以激光SLAM和视觉SLAM为主 xff0c 激光雷达直接可以获取三维点云坐标信息 xff0c 所以激光SLAM会比视觉SLAM稳定许多 xff0c
  • CAN 扩展帧和标准帧的适用范围

    刚接触CAN不久 xff0c 对很多CAN相关的知识不了解 xff0c 就难以进行灵活的运用 今天弄懂了CAN的标准帧和扩展帧的使用场合 xff0c 故此做一下笔记 首先 xff0c 得知道为什么会有这两种不同的帧 其实原因和IPV4和IP
  • ZCU104开发板:开发板组件描述

    1 Zynq UltraScale 43 XCUZU7EV MPSoC ZCU104板上安装了Zynq UltraScale 43 XCZU7EV 2FFVC1156 MPSoC xff0c 它在同一设备中集成了功能强大的处理系统 xff0
  • (超简单)Ubuntu/linux上搭建pytorch-gpu环境

    xff08 超简单 xff09 Ubuntu linux上搭建pytorch gpu环境 1 下载miniconda conda 1 下载miniconda conda conda和miniconda可选择在清华镜像源中下载 xff0c 这
  • GAN训练中遇到的mode collapse(模式崩塌)

    1 梯度 loss爆炸 xff08 NaN xff0c Inf xff09 这两天一直在训练自己的GAN模型 xff0c 训练过程中鉴别器极其不稳定 xff0c 训练的几个epoch之后经常出现NAN xff0c 在加入WGAN中的梯度惩罚
  • 如何训练GAN?能够让GAN work的方法和技巧

    如何训练GAN xff1f 能够让GAN work的方法和技巧 尽管在生成对抗网络 xff08 GAN xff09 中的研究继续改善了这些模型的基本稳定性 xff0c 但我们使用了许多技巧来训练它们并使它们日复一日地稳定 xff08 翻译自
  • batch size,学习率(learning rate),and training time

    batch size 学习率 xff08 learning rate xff09 and training time 1 batch size和leaning rate的关系 现在深度学习中的绝大多数算法采用梯度下降法来进行训练 xff0c
  • torch.optim.lr_scheduler:pytorch必须掌握的的4种学习率衰减策略

    梯度下降算法需要我们指定一个学习率作为权重更新步幅的控制因子 xff0c 常用的学习率有0 01 0 001以及0 0001等 xff0c 学习率越大则权重更新 一般来说 xff0c 我们希望在训练初期学习率大一些 xff0c 使得网络收敛
  • 虚拟内存与物理内存,自己理解,删除了一些细节,更容易懂

    其实虚拟内存就是字面意思 xff0c 虚拟保存在磁盘中的 xff0c 我们知道32为操作系统下一个进程是4g大小空间 xff0c 我们物理内存 xff08 也就是我们说的内存条 xff09 xff0c 假如我们以8g内存条定义 假如我们没有
  • 轻量型神经网络 shufflenet V1和shufflenet V2

    1 shufflenet V1 ShuffleNet是旷视科技 Face 43 43 提出的一种计算高效的CNN模型 xff0c 其和MobileNet和SqueezeNet等一样主要是想应用在移动端 所以 xff0c ShuffleNet
  • 详解C++中的const关键字

    1 const修饰指针 const修饰指针有三种情况 const修饰指针 常量指针 const修饰常量 指针常量 const即修饰指针 xff0c 又修饰常量 int main int a 61 10 int b 61 10 const修饰
  • CMake教程及使用案例

    1 CMake教程及使用案例 2 CMake Tutorial 3 https www cnblogs com crazyang p 14371953 html
  • gcc/g++编译选项&动态/静态库

    1 gcc g 43 43 编译选项 amp 动态 静态库

随机推荐

  • 外围设备对飞控的作用

    以下是我对外围设备的理解 xff08 如果理解有误 xff0c 请大佬们指正 xff09 桨叶 xff08 必须 xff09 xff1a 动力装置 电机 必须 xff1a 为无人机提供动力输出 电调ESC 必须 xff1a 电子调速器 控制
  • 飞控外围设备选型的注意事项

    合适的选型 xff08 如电机 43 桨叶 43 电池 xff09 可以兼顾无人机的航时和稳定性 xff0c 可将航时和稳定性发挥到极致 桨叶 xff1a 螺距和长度 桨叶的选择会影响无人机的航时和稳定性 xff0c 选的好航时和稳定性可以
  • STM32CubeMX学习笔记——FreeRTOS_任务创建与删除

    STM32CubeMX学习笔记 FreeRTOS 任务创建与删除 Github简介任务创建可视化创建方式代码创建方式 任务删除 Github https github com HaHaHaHaHaGe Planof2019 half tre
  • 关于串口发送的几个标志位

    首先了解STM32串口发送数据的简单过程 xff0c 如下图所示 发送 xff1a 软件将数据写到USARTx gt DR里面 xff0c 硬件自动把USARTx gt DR里面的数据并行转移到 发送移位寄存器 xff0c 然后硬件自动将发
  • TCP三步握手,以及相关问题

    三次握手是 TCP 连接的建立过程 在握手之前 xff0c 主动打开连接的客户端结束 CLOSE 阶段 xff0c 被动打开的服务器也结束 CLOSE 阶段 xff0c 并进入 LISTEN 阶段 随后进入三次握手阶段 xff1a 首先客户
  • HTTP digest认证

    HTTP的basic认证是通过明文来传输用户名和密码 xff0c 安全性不够 xff0c 因此HTTP又推出了摘要认证的方式来验证用户名和密码 流程和Basic认证差不多 1 浏览器访问服务端受保护的资源 xff0c 服务端返回401 同时
  • SLAM【十】回环检测

    SLAM 十 回环检测 回环检测的作用及意义作用意义 回环检测方法准确率和召回率词袋模型 字典字典的结构字典的创建相似度计算相似度评分的处理关键帧的处理检测之后的验证 参考 回环检测的作用及意义 作用 问题 xff1a 为了解决整个SLAM
  • ubuntu下切换默认python版本

    ubuntu下切换默认python版本 以 root 身份登录 xff0c 首先罗列出所有可用的python 替代版本信息如果出现以上所示的错误信息 xff0c 则表示 Python 的替代版本尚未被update alternatives
  • AVL分析飞机气动特性

    AVL xff0c 全称为Athena Vortex Lattice xff0c 是MIT的Mark Drela教授开发的一个气动分析程序 程序最初由Harold Youngren 1988年为MIT Athena TODOR航空软件集编写
  • ros_arduino_bridge+arduino+l298n控制编码电机(Arduino uno)

    踩了许多坑 xff0c 看了许多教程 xff0c 终于成功用ros arduino桥的方法实现了对电机的控制 xff0c 希望大家能通过我的教训少走一些弯路 注 xff1a 本教程的所有代码可以进入我主页下载 step1 ubuntu下安装
  • 典型TI LaunchPad 比较

    型号主芯片主频资源尺寸支持软件参考价格MSP EXP432P401R MSP432P401R 48MHz 256KB Flash 64KB RAM 32KB ROM 9 5cm 5 85cm Keil Energia CCS 199 EK
  • 关于反序列异常问题

    异常显示序列号不一致 xff0c 序列化和反序列化受serialVersionUID序列号控制 xff0c 异常原因 xff1a 对象序列化时忘了写显式序列号 xff0c 然后再反序列化才重写的序列号 xff0c 也就是 序列化和反序列化的
  • ros消息和服务error:The manifest (with format version 2) must not contain the following tags: run_depend

    在按ROS入门教程 xff08 点击打开链接 xff09 行进过程中到了执行 rosmsg show beginner tutorials Num 命令时 xff0c 出现提示 The manifest with format versio
  • 【Vue + ElementUI】el-progress 各类常用场景(自动计算percentage,format自定义显示文字)

    效果图 xff1a 1 当前数据结构 progressList planNum 150 计划数量 completeNum 80 完成数量 planNum 70 completeNum 70 planNum 70 completeNum 90
  • 音乐播放器的一些思路

  • Arduino笔记实验(初级阶段)—Keypad小键盘

    Arduino笔记实验 初级阶段 Keypad小键盘 文章目录 Arduino笔记实验 初级阶段 Keypad小键盘前言一 电路图二 集成库方案 Keypad 三方集成库代码实验效果展示 三 基于Arduino原生方案4 4按键膜结构图代码
  • Arduino笔记实验(初级阶段)—火焰传感器+有源蜂鸣器实验

    Arduino笔记实验 初级阶段 火焰传感器 43 有源蜂鸣器实验 文章目录 Arduino笔记实验 初级阶段 火焰传感器 43 有源蜂鸣器实验前言一 电路图二 火焰传感器 4引脚 有源蜂鸣器代码实验效果展示 三 火焰传感器火焰传感器模块示
  • Arduino笔记实验(初级阶段)—DHT11温湿度传感器

    Arduino笔记实验 初级阶段 DHT11温湿度传感器 文章目录 Arduino笔记实验 初级阶段 DHT11温湿度传感器前言一 电路图二 DHT11温湿度传感器实验代码实验效果展示 三 DHT11温湿度传感器实验总结 前言 自学笔记 x
  • C语言笔记-26-网络-UDP网络编程

    C语言笔记 26 网络 UDP网络编程 文章目录 C语言笔记 26 网络 UDP网络编程前言一 UDP编程模型概括三 UDP编程模型代码UDP服务端UDP客户端 总结 前言 自学笔记 xff0c 没有历史知识铺垫 xff08 省略百度部分
  • C++笔记-6-c++静态与单例

    C 43 43 笔记 6 c 43 43 静态与单例 文章目录 C 43 43 笔记 6 c 43 43 静态与单例前言一 静态静态成员变量静态成员函数 二 单例饿汉式懒汉式 总结 前言 自学笔记 xff0c 没有历史知识铺垫 xff08