简单宏实现将C++类变为singleton模式

本文介绍了一种使用宏定义实现C++单例模式的方法,并提供了两种不同参数情况下的宏定义实现。此外,还讨论了如何利用boost::noncopyable防止对象被复制,以及如何在多线程环境下确保单例模式的线程安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#define SINGLETON(T, ...) \                       
    static T& GetInstance() \                     
    {\                                            
        static T instance(__VA_ARGS__); \         
        return instance; \                        

    }                       

                      

#define SINGLETON_NOARG(T) \                      
    static T& GetInstance() \                     
    {\                                            
        static T instance; \                      
        return instance; \                        

    }

这两个宏需要在public域下使用

目前还没有实现将两个宏合并为一个宏,如果有朋友知道 烦请告知~

另外如果需要自动实现无法赋值拷贝,可以使用boost::noncopyable

具体如下

#include <boost/noncopyable.hpp>

class Singleton : boost::noncopyable
{
    protected:
        Singleton()
        {   
        }   
};

你的类只需要继承这个Singleton类即刻,当然,还得用上之前的两个宏中的一个来定义函数~


update:

可以用

#define SINGLETON(T, ...) \
    static T& GetInstance() \
    {\
        static T* p = new T(__VA_ARGS__); \
        return *p; \
    }\

来替换之前的两个宏,这样只需要一个宏即可


update 2:

据说良好的设计是在main函数之前都是单线程的, 那么 需要线程安全的话,就在使用下面两个

#define SINGLETON_DECLEAR(T) \
    static T* pInstance; \
    static T& GetInstance() \
    {\
        return *pInstance; \
    }


#define SINGLETON_IMPLEMENT(T, ...) \
    T* T::pInstance = new T(__VA_ARGS__);

这样当还没进入主函数的时候都已经初始化好了,而且实现CPP和H分离。


哈 很无聊的感觉~


转载于:https://my.oschina.net/Jooooooker/blog/103099

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值