C++ 写单例的办法
先在头文件声明:
声明一个COemInstancer的 _this指针:
static COemInstance* _this;
.然后在文件外层这样写:
#define CXXModule COemInstance::instance()
#define ExecuteCommand(ClassName,RunCommand) class Tempclass##ClassName\
{public:Tempclass##ClassName(){RunCommand;}};\
Tempclass##ClassName g_Tempclass##ClassName;
cpp:这样写:
先全局声明:
COemInstance * COemInstance::_this = nullptr;
ExecuteCommand(COemInstance, COemInstance::instance())
调用的时候就可以
CXXModule--->xxx
多一层ExecuteCommand 的好处是确保百分百加载,然后在多线程中确保安全加载
COemInstance* COemInstance::instance()
{
if (!_this)
{
if (!_bDestoryed_)
{
_this = new COemInstance();
//_this->Initialization();
atexit(&COemInstance::destory);
}
}
return _this;
}
void COemInstance::destory()
{
if (_this)
{
delete _this;
_this = NULL;
_bDestoryed_ = true;
}
}