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);}};
如果有不对的地方还请纠正