我像boost一样写了一个单例模板类:
template <typename _T>
class Singleton
{
public :
static _T* Instance()
{
static _T obj;
return &obj;
}
protected :
Singleton() {}
private :
struct ObjectCreator
{
ObjectCreator()
{
Singleton<_T>::instance();
}
};
static ObjectCreator object_creator;
};
template <typename _T>
typename Singleton<_T>::ObjectCreator Singleton<_T>::object_creator;
Run Code Online (Sandbox Code Playgroud)
我写了主要功能来测试它.
#include "Singleton.h"
class A : public Singleton <A>
{
public:
int a;
};
int main()
{
A::Instance()->a = 2;
}
Run Code Online (Sandbox Code Playgroud)
我知道我错误地输入了Instance in ObjectCreator的构造函数,奇怪的是我可以通过gcc-4.4.7正确编译它,然后我使用了clang-6.0,它打了我的错字.
我猜gcc可以做一些优化,因为我没有做任何事情ObjectCreator,所以它忽略了错误代码.
我有两个问题:
Ps:我知道boost会添加一个do_nothing函数ObjectCreate …