GoF创建型模式——单例

Singleton Pattern

使用单例的意图

  • 确保一个类只有一个实例

使用场景

  • 在多个客户端会话中共享同一个类的某个实例
  • 使某个类只有一个实例对象,或有限个实例对象

好处或缺点

  • 需要确保多线程对单例对象的访问同步

示例代码

////Singleton.h
#pragma once
#include <mutex>

class Singleton
{
public:
    Singleton* Instance();

protected:
    Singleton();

private:
    static std::mutex m_mutex;
    static Singleton * instance;
};

////Singleton.cpp
#include "Singleton.h"

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

Singleton * Singleton::Instance()
{
    if (this->instance == nullptr)
    {
        m_mutex.lock();
        if(this->instance == nullptr)
            this->instance = new Singleton;
        m_mutex.unlock();
    }
    return this->instance;
}

Singleton::Singleton()
{
}

注意点:所谓的线程安全只能保证同时最多有一个实例,但是不同的线程可以同时访问这同一个实例,所以还需要确保线程访问的同步问题

猜你喜欢

转载自blog.csdn.net/a119258/article/details/81172570
今日推荐