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();

  • 相关阅读:
    Windows系统架构
    UVa10006-Carmichael Numbers
    Android打开系统设置
    C语言与汇编“硬在哪里”——什么是面向硬件?
    javaSocket与C通信
    小智慧25
    sqlplus中显示sql执行计划和统计信息
    记一次修复被篡改的IE首页
    UIView的生命周期
    [置顶] 关于UBUNTU 12.04, 在THINKPAD E430C上WIFI连接不上的问题
  • 原文地址:https://www.cnblogs.com/kenter/p/2124400.html
Copyright © 2011-2022 走看看