【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;
}
相关推荐
萝卜兽编程4 分钟前
优先级队列
c++·算法
Bruce小鬼5 分钟前
QT文件基本操作
开发语言·qt
2202_7544215411 分钟前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
我只会发热18 分钟前
Java SE 与 Java EE:基础与进阶的探索之旅
java·开发语言·java-ee
懷淰メ28 分钟前
PyQt飞机大战游戏(附下载地址)
开发语言·python·qt·游戏·pyqt·游戏开发·pyqt5
hummhumm42 分钟前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j
宁静@星空1 小时前
006-自定义枚举注解
java·开发语言
hummhumm1 小时前
第 28 章 - Go语言 Web 开发入门
java·开发语言·前端·python·sql·golang·前端框架
武子康1 小时前
Java-07 深入浅出 MyBatis - 一对多模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据库·sql·mybatis·springboot
珹洺1 小时前
C语言数据结构——详细讲解 双链表
c语言·开发语言·网络·数据结构·c++·算法·leetcode