首页 > 编程语言 >C++ 单例模式最佳实践

C++ 单例模式最佳实践

时间:2023-01-25 11:22:49浏览次数:41  
标签:11 Singleton singleton C++ 最佳 线程 单例

单例模式有很多种实现:

  • 懒汉/饿汉
  • 非线程安全
  • 线程安全
    • 每次判空加锁(效率不高)
    • DCL:Double-check lock(繁琐,C++11 之前的最佳实现)
    • Meyers’ singleton:静态变量(简洁,C++11 之后的最佳实践)

C++11 规范保证了局部 static 对象的线程安全(早期个别 C++11 编译器对该特性的支持不完善,现在基本都没问题)

我心目中最简洁标准的实现(差一点也不行,返回指针也不行):

class Singleton {
 public:
  Singleton& getInstance() {
    static Singleton singleton;
    return singleton;
  }

 private:
  Singleton();
};

直接返回引用,无需静态指针成员(能不用指针就尽可能不用!)

标签:11,Singleton,singleton,C++,最佳,线程,单例
From: https://www.cnblogs.com/tengzijian/p/17066770.html

相关文章

  • C++ 实现复制赋值运算符重载
    考察点返回值类型MyClass&,可以连续赋值参数类型:(constMyClass&rhs)或者(MyClassrhs)值传递(copy-swap)自赋值安全无内存泄漏,旧值需要析构异常安全参考实现c......
  • 【奇妙的数据结构世界】 用经典例题对数组进行全面分析 | C++
    ​​​​​​第八章  数组:::hljs-center目录第八章数组●前言●一、数组是什么?1.简要介绍2.具体情况●二、数组典型例题——一维&二维&三维1.一维数组......
  • C/C++ 单链表的实现(初始化、插入、删除、销毁)
    #include<iostream>#include<Windows.h>#defineMAX_SIZE100usingnamespacestd;//单链表typedefstruct_LinkList{intdata;//数据域struct_LinkL......
  • C++ 类的成员函数指针
    classdog{intname;public:dog();voidprintname();};dog::dog(){cout<<"dog构造"<<endl;};voiddog::printname(){cout<<"dog"<<endl;......
  • C++之*与**与&的爱恨情仇
      一、解释*和&&在变量定义区,表示引用int&x;&在变量操作区,表示取地址符intx=10,*p=&x;*在变量定义区,表示指针int*x;*在变量操作区,表示解引用int*x;cout<<*x......
  • C++小例子【未更新完】
    题目目录​​题目1:全排列​​​​题目2:三数排序​​​​题目3:1+2+3+...+100=?​​​​题目4:大整数相加​​​​题目5:无零整数​​题目1:全排列全排列用1、2、3三个数字可......
  • 算法竞赛向 C++ Standard Library 使用速查
    因网络上STL教程大多零散且缺乏严谨性,本文对算法竞赛所需C++StandardLibrary做了一个较为全面的总结。全文主要参考以下文档:Containerslibrary-cppreference.c......
  • MAC平台上VSCode搭建C++开发环境遭遇问题
    Q1:c_cpp_properties.json文件中的macFrameworkPath参数配置​​官网​​上给定内容如下:{"configurations":[{"name":"Mac","includePath":["${workspa......
  • C++ 类中花括号 {} 换行的正确写法 All In One
    C++类中花括号{}换行的正确写法AllInOneC++Classcurlybraces{}&linebreakC++Class&ObjectC++类&对象[template-spec]class[ms-decl-spec][......
  • C++堆与栈【cherno课程学习】
    C++的堆与栈当我们程序开始的时,它被分成了一堆不同的内存区域,除了堆和栈还有很多东西,但我们最关心的两个就是堆和栈在应用程序启动后,操作系统要做的就是,他会将整个郑......