C++: 类单例的宏实现(方便调用)

//=============== Micros ===============
// singleton declare
#define DECLARE_SHARE(ClassName) \
    private:\
        static ClassName* singleInstance;\
    public:\
        static ClassName* shareInstance()\
        {\
            if(NULL == singleInstance) singleInstance = new ClassName();\
            return singleInstance;\
        }\
    private:\
        class CGarbo\
        {\
            public:\
            ~CGarbo()\
            {if( ClassName::singleInstance )delete ClassName::singleInstance;}\
        };\
        static CGarbo Garbo;

//
#define BUILD_SHARE(ClassName)\
    ClassName* ClassName::singleInstance = NULL;


使用方式:

单例类头文件中需要引用包含该宏的头文件,并在声明中使用该宏的 DECLARE_SHARE() 
而类实现中需要在一开始 BUILD_SHARE()

例:
//dlgmain.h
class DlgMain : public QDialog
{
    Q_OBJECT
 
    DECLARE_SHARE(DlgMain)
public:
    explicit DlgMain(QWidget *parent = 0);
    ~DlgMain();
}

//dlgmain.cpp
#include "dlgmain.h"

BUILD_SHARE(DlgMain)
DlgMain::DlgMain(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DlgMain)
{
    ui->setupUi(this);
...
}
...



你可能感兴趣的:(Tips)