单例模式 【宏定义实现】

来源:互联网 发布:国家网络应急中心考试 编辑:程序博客网 时间:2024/04/28 22:20

一、代码实现

SingletonMacroDef.h

#pragma once//单例宏定义,头文件声明#define DECLARE_SHARE(ClassName) \    private:\        static ClassName* m_spInstance;\    public:\        static ClassName* GetInstance()\        {\            if(NULL == m_spInstance)\            {\                m_spInstance = new ClassName(); \                static Cleaner s_clean;\            }\            return m_spInstance;\        }\    private:\        class Cleaner\        {\            public:\            Cleaner(){}\            ~Cleaner()\            {if( ClassName::GetInstance() ) delete ClassName::GetInstance();}\        };\//CPP文件静态变量声明#define BUILD_SHARE(ClassName)\    ClassName* ClassName::m_spInstance = NULL;

二、使用方式(示例)

  • ConfigMan.h
#pragma once#include "SingletonMacroDef.h"#define gConfig ConfigMan::GetInstance()class ConfigMan{    DECLARE_SHARE(ConfigMan)public:    ConfigMan();    ~ConfigMan();    void Init();}
  • ConfigMan.cpp
#include "stdafx.h"#include "ConfigMan.h"BUILD_SHARE(ConfigMan)ConfigMan::ConfigMan(){}ConfigMan::~ConfigMan(){}void ConfigMan::Init(){    printf("Hello world!");}
  • Test.cpp
#include "stdafx.h"#include <windows.h>#include "ConfigMan.h"int _tmain(int argc, _TCHAR* argv[]){    gConfig->Init();    system("PAUSE");    return 0;}
原创粉丝点击