C++单例模式实现再回顾

单例模式需要注意的问题:

1、static实例保证只有一个实例

2、需要C++类外初始化实例、线程锁等

3、私化构造函数,关闭赋值运算符=和拷贝构造函数

4、应当有Releas函数

5、应该考虑线程安全问题

下面是懒汉模式的实现:

复制代码
#include <thread>
#include <mutex>

class  singleton
{
private:
    singleton() = default;

public:
    static singleton * m_instance;
    static std::mutex mu;

    static singleton * GetInstance();
    void Print();
    void Release();

    singleton & operator=(const singleton & pinstance) = delete;
    singleton(const singleton & pinstance) = delete;
    ~ singleton();
};
复制代码
复制代码
#include "single.h"
#include <iostream>
using namespace std;

singleton* singleton::m_instance=nullptr;
std::mutex singleton::mu;

void singleton::Print(){
std::cout<<" It's a singleton"<<std::endl;
}

singleton* singleton::GetInstance(){
    if (m_instance==nullptr)
    {
        mu.lock();
        if (m_instance==nullptr)
        {
          m_instance=new singleton();
        }
        mu.unlock();
    }
  return m_instance;
}

void singleton::Release(){
    delete m_instance;
}
复制代码

 

posted @   卖雨伞的小男孩  阅读(142)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示