【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;
}
相关文章
|
1月前
|
设计模式 安全 测试技术
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
61 0
|
1月前
|
设计模式 安全 测试技术
【C++】—— 单例模式详解
【C++】—— 单例模式详解
|
3月前
|
C++
C++实现单例模式-多种方式比较
单例模式,面试中经常被问到,但是很多人只会最简单的单例模型,可能连多线程都没考虑到,本文章从最简单的单例,到认为是最佳的单例模式实现方式,单例模式没有什么知识点,直接上源码
50 0
|
6月前
|
设计模式 安全 Java
特殊类设计及单例模式(C++)
特殊类设计及单例模式(C++)
65 1
|
4天前
|
设计模式 Java C++
【C++高阶(八)】单例模式&特殊类的设计
【C++高阶(八)】单例模式&特殊类的设计
|
1月前
|
设计模式 存储 缓存
【ffmpeg C++ 播放器优化实战】优化你的视频播放器:使用策略模式和单例模式进行视频优化
【ffmpeg C++ 播放器优化实战】优化你的视频播放器:使用策略模式和单例模式进行视频优化
55 0
|
1月前
|
设计模式 存储 缓存
设计模式之单例模式(C++)
设计模式之单例模式(C++)
22 2
|
3月前
|
设计模式 安全 编译器
c++单例模式-6种单例层层迭代优化
6种单例模式,层层迭代优化
17 1
|
3月前
|
安全 C++
C++:谈谈单例模式的多种实现形式
C++:谈谈单例模式的多种实现形式
|
4月前
|
安全 C++
C++单例模式
C++单例模式
30 1