zoukankan      html  css  js  c++  java
  • [笔记]C++代码演示Singleton单类实例

    本文演示了如何无需显式声明一个类,直接通过“类名::GetInstance()”方式获得单类实例的指针。

    #include <iostream>
    
    using namespace std;
    
    // Singleton 基类,提供 GetInstance() 方法,获得T类的单实例指针
    template <class T>
    class Singleton{
    public:
        static T* GetInstance(){
            static T instance;  // 利用 static 从而获得单类型的实例
            return &instance;
        }
    
    protected:
        Singleton(){}
        virtual ~Singleton(){}
    };
    
    // 子类 MySingleton,只需继承自 Singleton<MySingleton>,
    // 即可通过 MySingleton::GetInstance() 获得单实例指针
    class MySingleton: public Singleton<MySingleton>{
    public:
        int GetSum(int a, int b){
            return a + b;
        }
    private:
        // 利用 friend 获得调用 Singleton 类的 GetInstance() 方法的权限
        friend class Singleton<MySingleton>;    
    };
    
    int main(int argc, char* argv[])
    {
        // 无需显式创建 MySingleton 的实例,即可通过 MySingleton::GetInstance() 获得单实例指针
        std::cout << "1+2=" << MySingleton::GetInstance()->GetSum(1,2) << std::endl;
        getchar();
        return 0;
    }

    VC2010编译通过,运行结果为:1+2=3

  • 相关阅读:
    MySQL服务端恶意读取客户端文件漏洞 (DDCTF2019和国赛均涉及到这个漏洞)
    (转载)基于BIGINT溢出错误的SQL注入
    程序逻辑问题
    ansible笔记
    centos6 sersync2使用
    vsftpd服务
    rsync和rsync后台模式
    mysql5.6和5.7安装 centos
    mysql5.7-my.cnf
    bind-dns服务器搭建
  • 原文地址:https://www.cnblogs.com/journeyonmyway/p/2566140.html
Copyright © 2011-2022 走看看