C++单例模式的继承方式实现
解释一下使用场景,当一个项目中需要多个单例类的时候,可以实现一个父类,然后分别继承父类,避免每个类都去实现单例操作,只是提供一种操作形式,仅供参考,具体可以改实现。
#include <iostream>
using namespace std;
template<typename T>
class SingleTon
{
friend T;
public:
static T& getInstance()
{
static T instance;
return instance;
}
private:
SingleTon()
{
cout << __FUNCTION__ << endl;
}
SingleTon(const SingleTon&) = delete;
SingleTon& operator=(const SingleTon&) = delete;
virtual ~SingleTon()
{
cout << __FUNCTION__ << endl;
}
};
class CTest : public SingleTon<CTest>
{
friend SingleTon;
public:
void func()
{
cout << __FUNCTION__ << endl;
}
private:
CTest()
{
cout << __FUNCTION__ << endl;
}
~CTest()
{
cout << __FUNCTION__ << endl;
}
};
int main()
{
CTest::getInstance().func();
//禁用拷贝构造,避免出现多个单例
//CTest tt(CTest::getInstance());
return 0;
}
//代码不易,仅供参考,欢迎指出错误,带我学习,大佬们!!!
/*
note:
子类继承父类,定义子类需要用到父类的构造,因此会用到父类的构造函数,因此父类里将子类设置为友元类。
父类执行静态单例的时候需要用到子类的构造函数,因此在子类需要将父类设置为友元类。
***构造析构中用的__FUNCTION__是为了输出函数名,可以将构造析构设置=default;***
*/