• 用宏实现的单例模式


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

  • 相关阅读:
    Exp8-Web综合
    Exp7-网络欺诈防范
    Exp6-MSF应用基础
    加密API学习
    Exp5 信息搜集与漏洞扫描
    Exp4-恶意代码分析
    Exp3-免杀原理
    Exp2-后门原理与实践
    leetcode 22括号生成 暴力法
    413 等差数列划分
  • 原文地址:https://www.cnblogs.com/kenter/p/2124400.html
Copyright © 2020-2023  润新知