【C++ 单例模式】

简介: 【C++ 单例模式】

正确的析构 静态实例和回收类

SingletonMode.cpp

#include <iostream>
#include <pthread.h>
class Singleton
{
  private:
    Singleton(){
        std::cout << "构造" << std::endl;
    };
    ~Singleton()
    {
        std::cout << "析构" << std::endl;
    }
  public:
    static Singleton *getInstance()
    {
        static Singleton local_instance;
        return &local_instance;
    }
};
class SingletonPattern
{
private:
  SingletonPattern()
    {
        std::cout << "创建单例模式对象!\n";
    }
    SingletonPattern(const SingletonPattern& other);
  ~SingletonPattern()
    {
    }
private:
  static SingletonPattern* m_Instance;
    static pthread_once_t ponce_;
    static void init()
    {
         m_Instance = new SingletonPattern();
    }
public:
  static SingletonPattern* GetInstance()
    {
        pthread_once(&ponce_, &SingletonPattern::init);
        return m_Instance;
    }
  void display()
    {
        std::cout << "使用单例模式!\n" ;
    }
private:
  class CGabor
  {
  public:
    ~CGabor(){
      if (SingletonPattern::m_Instance){
        delete SingletonPattern::m_Instance;
        SingletonPattern::m_Instance = NULL;
                std::cout << "SingletonPattern 析构" << std::endl;
      }
    }
  };
  static CGabor m_Gabor;
};
SingletonPattern* SingletonPattern:: m_Instance = nullptr;
SingletonPattern::CGabor SingletonPattern::m_Gabor;
pthread_once_t SingletonPattern::ponce_ = PTHREAD_ONCE_INIT;
// g++ SingletonMode.cpp -o SingletonMode -std=c++11 -lpthread
int main()
{
    Singleton *a = Singleton::getInstance();
    Singleton *b = Singleton::getInstance();
    if(a==b){
        std::cout<< "a==b" <<'\n';
    }
    SingletonPattern* m_Test = SingletonPattern::GetInstance();
  m_Test->display();
    return 0;
}
相关文章
|
6月前
|
设计模式 安全 测试技术
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
142 0
|
6月前
|
设计模式 安全 测试技术
【C++】—— 单例模式详解
【C++】—— 单例模式详解
|
6月前
|
C++
C++实现单例模式-多种方式比较
单例模式,面试中经常被问到,但是很多人只会最简单的单例模型,可能连多线程都没考虑到,本文章从最简单的单例,到认为是最佳的单例模式实现方式,单例模式没有什么知识点,直接上源码
90 0
|
1月前
|
C++
C++单例模式
C++中使用模板实现单例模式的方法,并通过一个具体的类A示例展示了如何创建和使用单例。
30 2
|
6月前
|
设计模式 安全 算法
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
47 0
|
3月前
|
安全 C++
C++ QT 单例模式
C++ QT 单例模式
55 0
|
3月前
|
设计模式 安全 IDE
C++从静态类型到单例模式
C++从静态类型到单例模式
38 0
|
4月前
|
设计模式 安全 C++
C++一分钟之-C++中的设计模式:单例模式
【7月更文挑战第13天】单例模式确保类只有一个实例,提供全局访问。C++中的实现涉及线程安全和生命周期管理。基础实现使用静态成员,但在多线程环境下可能导致多个实例。为解决此问题,采用双重检查锁定和`std::mutex`保证安全。使用`std::unique_ptr`管理生命周期,防止析构异常和内存泄漏。理解和正确应用单例模式能提升软件的效率与可维护性。
58 2
|
5月前
|
设计模式 存储 缓存
C++ -- 单例模式
**摘要:** 单例模式确保一个类仅有一个实例,并提供全局访问点。为了实现单例,构造函数通常设为私有,通过静态成员函数来创建和返回实例。两种常见实现是饿汉模式(在类加载时创建实例,线程安全但可能导致不必要的内存占用)和懒汉模式(首次使用时创建,可能需线程同步)。拷贝构造函数和赋值运算符通常被禁用来防止额外实例的创建。单例模式适用于资源管理、缓存和线程池等场景。在C++中,静态成员变量和函数用于存储和访问单例实例,保证其生命周期与程序相同。
|
6月前
|
安全 程序员 C语言
从C语言到C++_37(特殊类设计和C++类型转换)单例模式(下)
从C语言到C++_37(特殊类设计和C++类型转换)单例模式
54 5