ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

singleton_pattern

singleton_pattern

什么是懒汉单例模式(程序在使用的时候才会构造这个类)
什么是饿汉单例模式(程序启动的时候就构造了这个类)
程序内只存在一个这样的类,不需要重复构造,避免浪费,如读取外部文件,只需一次读取,全局使用。

单例模式代码

//singleton_pattern.h
#pragma once
#include <memory>
#include <mutex>
class Monitor
{
public:static Monitor* getInstance();static Monitor& getInstance2();static void getName();
private:Monitor() = default;Monitor(const Monitor&) = delete;Monitor& operator=(const Monitor&) = delete;                static std::unique_ptr<Monitor> m_instance;static std::mutex m_mutex;
};#include <singleton_pattern.h>
//实例只会被创建一次,多线程下
std::unique_ptr<Monitor> Monitor::m_instance = nullptr;
Monitor* Monitor::getInstance() 
{if (m_instance == nullptr) {                     // 第一次检查(不加锁,提高性能)std::lock_guard<std::mutex> lock(m_mutex);   // 加锁if (m_instance == nullptr) {                 // 第二次检查(加锁保护)m_instance.reset(new Monitor());         // 创建实例}}return m_instance.get(); // 返回原始指针
}
//推荐
Monitor &Monitor::getInstance2()
{static Monitor instance; // Guaranteed to be destroyed.return instance;                      // Instantiated on first use.
}

上述代码保证单例模式可以安全的创建实例,数据的安全需要额外同步操作。

返回列表