单例模式应用的地方太多了,每个人都要去将自己的类实现为单例,白白增加工作量,也可能出现bug。代码工程底层库中封装一个单例模式的模板基类,逻辑层类直接继承该类即可。
namespace Fir
{
template <typename T>
class Single
{
public:
static T *getInstance()
{
if (!instance)
{
instance = new T;
}
return instance;
}
static T &getMe()
{
return *getInstance();
}
protected:
Single()
{
cout << "create Single" << endl;
}
~Single()
{
delete instance;
instance = NULL;
cout << "delete Single" << endl;
}
private:
static T *instance;
Single(const Single&);
};
template <typename T>
T *Single<T>::instance = NULL;
}
测试文件:
class Test : public Fir::Single<Test>
{
friend class Fir::Single<Test>; //声明为友元类 因为Single会调用Test构造函数 如果Test构造函数时共有可不声明为友元
public:
void show() { cout << "1111" << endl; }
private:
Test() {}
};
void test_func()
{
Test::getMe().show();
}
int main()
{
Test::getMe().show();
test_func();
return 0;
}