C++ 17 inline static 实现单例模式

C++ 17 inline 内联定义静态变量

正在学习C++20新标准,突然看到C++17拓展inline变量,突然想到可不可以在类内部直接初始化静态变量,整个单例模式

  • 不需要在类外部初始化静态变量

  • 实现懒加载,需要的时候才加载

  • 线程安全

  • 外部无法调用构造函数,析构函数

代码如下:

/** 多线程条件下只执行一次* once_flag的生命周期。它必需要比使用它的线程的生命周期要长。所以通常定义成全局变量比較好。*/
static  std::once_flag init_flag;
// 单例模式
class singleton_pattern
{
private:inline static singleton_pattern* _instance_ptr{nullptr};// C++ 17 inline static 直接初始化private:singleton_pattern(){cout << "constructor called" << endl;}singleton_pattern(singleton_pattern&) = delete;singleton_pattern& operator=(const singleton_pattern&) = delete;public:~singleton_pattern(){cout << "destructor called" << endl;}static singleton_pattern* get_instance(){std::call_once(init_flag, [](){if (_instance_ptr == nullptr)_instance_ptr = new singleton_pattern;});return _instance_ptr;}void print_addr(){cout << std::format("address: {} \n", (void*)_instance_ptr);}};

如果有不对的地方还请纠正

在这里插入图片描述

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

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

相关文章

通过configSource提高web.config配置灵活性

很多时候我们会有这样的情况&#xff0c;开发环境和测试环境中的配置文件是不一样的&#xff0c;最明显的就是数据库连接串&#xff0c;这样&#xff0c;每次我们发布一个测试版本&#xff0c;都要手动去修改一下配置文件&#xff0c;是不是很麻烦的说。其实利用web.config中的…

实现分页的通用存储过程

显示指定表、视图、查询结果的第X页 对于表中主键或标识列的情况,直接从原表取数查询&#xff0c;其它情况使用临时表的方法 如果视图或查询结果中有主键,不推荐此方法 如果使用查询语句,而且查询语句使用了order by,则查询语句必须包含top 语句--感谢csdn.net邹建 --*//*--调…

React(74)--onRef在react中的使用

当在子组件中调用onRef函数时&#xff0c;正在调用从父组件传递的函数。this.props.onRef&#xff08;this&#xff09;这里的参数指向子组件本身&#xff0c;父组件接收该引用作为第一个参数&#xff1a;onRef {ref >&#xff08;this.child ref&#xff09;}然后它使用t…

CS144 lab0 笔记

CS144 lab0 笔记 下学期就学习计算机网络了,假期正好找个lab预习一下 配置 直接用 WSL2 Clion(安装在WSL2上) 做的实验,还是比用vscode方便一些的 直接fork仓库git clone …用clion打开,他都会自动生成开始写代码 实验 writing webget(入门) 这个实验就是让你熟悉一下网络…

ASP.NET常用代码

1. 打开新的窗口并传送参数&#xff1a; 传送参数&#xff1a; response.write("<script>window.open(*.aspx?id"this.DropDownList1.SelectIndex"&id1"...")</script>")接收参数&#xff1a; string a Request.QueryString(…

一步步学习SPD2010--第二章节--处理SP网站(6)---- 探索SP网站

SP技术没有一个界面&#xff1b;你可以通过使用Web浏览器或者兼容程序如Office 应用程序&#xff0c;包括SPD。你可以选择适合你必须完成的任务的接口。然而&#xff0c;根据你选择的程序&#xff0c;你可能有SP网站的不同视图。如果你使用MS Word&#xff0c;你只看到了网站和…

江民公司网络版问题汇总三

客户端和主控连接问题 登录江民控制台时&#xff0c;查找主机IP地址时查找不到&#xff0c;下面的客户端也查找不到主控的IP地址。<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1&#xff0e; 如果您的主控机器是XP 或者2003…

CS144 lab1 笔记

CS144 lab1 笔记 上图是TCP实现中模块和数据流的安排,我们要实现的就是StreamReassembler 一个字符重组器,将乱序的字符串,按照索引排序,使其成为连续字符,供TCPSender和TCPReceiver使用 有容量限制,超出的字符直接丢掉(不是整个片段) TCP接收到的片段从零开始,不会溢出 任何…

Netty 4.0 新的特性及需要注意的地方

Netty 4.0 新的特性及需要注意的地方 这篇文章和你一起过下Netty的主发行版本的一些显著的改变和新特性&#xff0c;让你在把你的应用程序转换到新版本的时候有个概念。 项目结构改变 Netty的包名从org.jboss.netty改为io.netty&#xff0c;因为我们不在是JBoss.org的一部分了。…

CS144 lab2 笔记

CS144 lab2 笔记 介绍 在lab0中&#xff0c;我们实现了一个ByteStream。 在lab1中&#xff0c;实现了一个重组字符片段的StreamReassembler&#xff0c;重组收到的字符片段&#xff0c;并且将排序好的字符串退送到ByteStream 在lab2中&#xff0c;j将实现一个TCPReceiver,它…

附件下载,中文文件名乱码如何解决???

问:我写了个程序&#xff0c;里面有文件要作为附件下载&#xff0c;英文文件名都正常&#xff0c;但中文文件名就会乱码&#xff0c;不知道如何解决&#xff0c;望高手指点。代码如下&#xff1a;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&#xff1d;&am…

养生之道

晚上 9-11点为免疫系统&#xff08;淋巴&#xff09;排毒时间&#xff0c;此段时间应安静或听音乐 晚间 11-凌晨 1点&#xff0c;肝的排毒&#xff0c;需在熟睡中进行。 凌晨 1-3点&#xff0c;胆的排毒&#xff0c;亦同。 凌晨 3-5点&#xff0c;肺的排毒。此即为何咳嗽的人…

freemarker小例子

1.在D盘下创建一个目录D:\\freemarker 2.在以上目录中放入一个模板文件test.ftl,内容如下&#xff1a; 第一个测试程序&#xff1a;${abc} 3.java代码如下&#xff08;需要导入freemarker.jar包&#xff09; Java代码 : package cn.freeteam.util;import java.io.BufferedW…

CS144 计算机网络实验 lab3 笔记

CS144 计算机网络实验 lab3 笔记 介绍 本实验中,我们将会在之前实验的基础上,实现一个TCP sender ----将字节流转换成数据报并发送. TCP协议是一个在不可靠的协议上提供可靠的,流量控制的协议。 我们在本实验中会实现一个TCP发送端&#xff0c;负责将发送端应用层传入的比特…

发送附件时,防止文件名中的中文字符变成乱码

在.net2005中&#xff0c;利用System.Net.Mail;下的MailMessage类发送邮件&#xff0c;为了防止附件文件名中的中文字符变成乱码&#xff0c;需要加attachment.NameEncoding Encoding.GetEncoding("GB2312");详细见下面的函数&#xff1a; private bool SendMail(s…

React(77)--纯函数和非纯函数

let student {firstName: "testing",lastName: "testing",marks: 500 }// 非纯函数 function appendAddress() {student.address {streetNumber:"0000", streetName: "first", city:"somecity"}; }console.log(appendAddr…

计算机进程小知识

最基本的系统进程&#xff08;也就是说&#xff0c;这些进程是系统运行的基本条件&#xff0c;有了这些进程&#xff0c;系统就能正常运行&#xff09;: smss.exe Session Manager csrss.exe 子系统服务器进程 winlogon.exe 管理用户登录 services.exe 包含很多系统服务 lsass.…

CS144 lab4 计算机网络实验 笔记

CS144 lab4 计算机网络实验 笔记 介绍 本实验中,我们将组合TCP sender和TCP receiver实现一个完整的TCP connection TCP是全双工连接,所以两方可以同时接收/发送信息,一端随时都有可能接收.发送信息 主要根据上图实现 tcp_connection.cc #include "tcp_connection.hh&…

unity2D技术学习与整理

目前有关unity2D的教程以及原理几乎都是国外的。我在这方面也是新手&#xff0c;看了一些例子有很多不懂的地方。 这个网站提供的教程很有参考价值 http://brackeys.com/ 还有这个 http://pixelnest.io/tutorials/2d-game-unity/table-of-contents/转载于:https://www.cnblogs.…