【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;
}
相关推荐
Biomamba生信基地21 分钟前
R语言基础| 下载、安装
开发语言·r语言·生信·医药
姜君竹22 分钟前
QT的工程文件.pro文件
开发语言·c++·qt·系统架构
思捻如枫25 分钟前
C++数据结构和算法代码模板总结——算法部分
数据结构·c++
奇树谦26 分钟前
使用VTK还是OpenGL集成到qt程序里哪个好?
开发语言·qt
VBA633737 分钟前
VBA之Word应用第三章第十节:文档Document对象的方法(三)
开发语言
老胖闲聊1 小时前
Python Rio 【图像处理】库简介
开发语言·图像处理·python
码界奇点1 小时前
Python Flask文件处理与异常处理实战指南
开发语言·python·自然语言处理·flask·python3.11
贩卖纯净水.1 小时前
浏览器兼容-polyfill-本地服务-优化
开发语言·前端·javascript
weixin_478689761 小时前
C++ 对 C 的兼容性
java·c语言·c++
k要开心1 小时前
C++概念以及基础框架语法
开发语言·c++