C++单例模式

更新时间: 2019-01-10 13:14:20
更新时间: 2020-05-15 17:58:19
// singleton.h
#ifndef SINGLETON_H
#define SINGLETON_H

#ifdef _MSC_BUILD
#pragma execution_character_set("utf-8") // 编译时把程序里的字符串使用 UTF-8 进行处理
#endif

#include <iostream>
#include <mutex>

class Singleton {
public:
    inline static Singleton *getInstance(){ // 
        if(nullptr == instance) {
            std::lock_guard<std::mutex> lock(mutex); // 自解锁
            if(nullptr == instance) {
                Singleton *instance_ = new Singleton(); // 很重要
                instance = instance_;
            }
        }
        return instance;
    }
private:
    Singleton(); // 私有保护构造函数
    ~Singleton();
    static Singleton *instance;
    static std::mutex mutex; // 懒汉式 DCL 机制
    class GC { // GC机制 自动释放Singlenton
    public:
        static GC gc; // 用于释放Singlenton
        ~GC() { // 可以在这里销毁所有的资源
            if(nullptr!=instance){
                delete instance;
                instance=nullptr;
            }
        }
    };
};
#endif // SINGLETON_H
// singleton.cpp
#ifdef _MSC_BUILD
#pragma execution_character_set("utf-8") // 编译时把程序里的字符串使用 UTF-8 进行处理
#endif

#include <QDebug>

#include "singleton.h"

Singleton *Singleton::instance=nullptr;
std::mutex Singleton::mutex;

Singleton::Singleton() {
    qDebug() << "构造:" << __FUNCTION__;
}

Singleton::~Singleton() {
    qDebug() << "析构:" << __FUNCTION__;
}
// main
#ifdef _MSC_BUILD
#pragma execution_character_set("utf-8") // 编译时把程序里的字符串使用 UTF-8 进行处理
#endif

#include "singleton.h"

Singleton::GC Singleton::GC::gc; // 重要 GC自动释放Singleton

int main(int argc,char *argv[]) {
    Singleton *singleton1=Singleton::getInstance();
    Singleton *singleton2=Singleton::getInstance();
    std::cout << singleton1 == singleton2 << std::endl; // true

    return 0;
}

本文作者:vanxkr

本文链接:http://www.vanxkr.com/2019/1/dp-singlenton

版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0许可协议。转载请注明出处!

sql查询按照in语句的顺序返回结果
0 条评论
已登录,注销 取消