【C++ 单例模式】

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

SingletonMode.cpp

javascript 复制代码
#include <iostream>

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()
    {

    }
private:
	static SingletonPattern* m_Instance;

public:
	static SingletonPattern* GetInstance()
    {
        if (m_Instance == nullptr) 
        {
            m_Instance = new SingletonPattern();
        }
        std::cout << "返回单例模式句柄!\n";
        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;

// g++ SingletonMode.cpp -o SingletonMode -std=c++11
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;
}
相关推荐
aini_lovee3 分钟前
基于Jousselme距离改进D-S证据理论matlab实现
开发语言·算法·matlab
再睡一夏就好7 分钟前
深入解析Linux页表:从虚拟地址到物理内存的映射艺术
linux·运维·服务器·c语言·c++·页表·缺页异常
颜*鸣&空7 分钟前
Qt Creator快速搭建项目
开发语言·qt
道剑剑非道10 分钟前
Qt【使用libmodbus库】
开发语言·数据库·qt
csbysj202015 分钟前
PHP 函数
开发语言
Starry_hello world33 分钟前
C++ 线程 (3)
c++
_w_z_j_37 分钟前
Linux----线程互斥与同步
linux·运维·开发语言
云栖梦泽39 分钟前
易语言网络编程基础:构建网络版应用
开发语言
雍凉明月夜1 小时前
c++ 精学笔记记录Ⅲ
c++·笔记·学习
oioihoii1 小时前
C++共享内存小白入门指南
java·c++·算法