【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;
}
相关推荐
Predestination王瀞潞9 小时前
IO操作(Num22)
开发语言·c++
宋恩淇要努力10 小时前
C++继承
开发语言·c++
沿着路走到底11 小时前
python 基础
开发语言·python
沐知全栈开发12 小时前
C# 委托(Delegate)
开发语言
江公望12 小时前
Qt qmlRegisterSingletonType()函数浅谈
c++·qt
任子菲阳13 小时前
学Java第三十四天-----抽象类和抽象方法
java·开发语言
为java加瓦13 小时前
单例模式:原理、实现与演进
单例模式
csbysj202013 小时前
如何使用 XML Schema
开发语言
R6bandito_13 小时前
STM32中printf的重定向详解
开发语言·经验分享·stm32·单片机·嵌入式硬件·mcu
逆小舟13 小时前
【C/C++】指针
c语言·c++·笔记·学习