[笔记]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

原文地址:https://www.cnblogs.com/journeyonmyway/p/2566140.html