我是靠谱客的博主 任性寒风,最近开发中收集的这篇文章主要介绍C++ 17 inline static 实现单例模式C++ 17 inline 内联定义静态变量,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
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);
}
};
如果有不对的地方还请纠正
最后
以上就是任性寒风为你收集整理的C++ 17 inline static 实现单例模式C++ 17 inline 内联定义静态变量的全部内容,希望文章能够帮你解决C++ 17 inline static 实现单例模式C++ 17 inline 内联定义静态变量所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复