zoukankan      html  css  js  c++  java
  • 用宏实现的单例模式

    #define SINGLETON_CLASS_NO_DEF_CONSTRUCT_BODY(class_name)\
        
    private:\
        class_name();\
        class_name(
    const class_name&);\
        class_name 
    & operator = (const class_name &);\
        
    public:\
        
    static class_name & Instance()\
            {\
            
    static class_name one;\
            
    return one;\
            }

    #define SINGLETON_CLASS(class_name)\
        
    private:\
        class_name(){}\
        class_name(
    const class_name&);\
        class_name 
    & operator = (const class_name &);\
        
    public:\
        
    static class_name & Instance()\
            {\
            
    static class_name one;\
            
    return one;\
            }

    两个宏的区别仅在于是否实现 默认的无参构造函数。使用例子:

    // HostBasicInformation.h
    class HostBasicInformation
    {
    	SINGLETON_CLASS_NO_DEF_CONSTRUCT_BODY(HostBasicInformation)
    
    public:
    	virtual ~HostBasicInformation();
    	
    	std::string GetInstallCode();
    	
    };
    
    // HostBasicInformation.cpp
    
    // 若使用SINGLETON_CLASS ,则不需要自己定义无参构造函数
    HostBasicInformation::HostBasicInformation(){
    
    }
    
    
    
    HostBasicInformation::~HostBasicInformation(){
    
    }
    
    std::string HostBasicInformation::GetInstallCode()
    {
    	return "";
    }
    

    这种宏的方式,主要优点在于:能严格限制此类的使用方式,也就是只能当做单例来使用。

    std::string str_installCode = HostBasicInformation::Instance().GetInstallCode();

  • 相关阅读:
    wxPython跨线程调用
    安卓开发24:FrameLayout布局
    URAL 1081
    [置顶] Hibernate运行机理
    [置顶] Hibernate的一个经典异常
    poj1190 生日蛋糕 dfs
    [置顶] 自己写代码生成器之生成Dal层代码(获取数据库所有表名称)
    修改mysql数据存储的地址
    拖延心理学
    DeepLearnToolbox使用总结
  • 原文地址:https://www.cnblogs.com/kenter/p/2124400.html
Copyright © 2011-2022 走看看