////////////////////////////////////////////////////////////////////////////////// Singleton.h////////////////////////////////////////////////////////////////////////////////#ifndef __SINGLETON_H__#define __SINGLETON_H__#include "ProcessFunction/ProcessConfig.h"#include "ProcessFunction/UGGuard.h"namespace UGC{class Cleanup{public:/// No-op constructor.Cleanup (void){};/// Destructor.virtual ~Cleanup (void){};/// Cleanup method that, by default, simply deletes itself.virtual void cleanup () = 0;};template <class TYPE, class LOCK>class SingletonThreadSafe: public Cleanup{public:/// Global access point to the Singleton.static TYPE *instance (void){SingletonThreadSafe<TYPE, LOCK> *&singleton = SingletonThreadSafe<TYPE, LOCK>::instance_i();// Perform the Double-Check pattern...if (singleton == 0){static LOCK lock;GUARD_RETURN (LOCK, mon, lock, 0);/*if (singleton == 0){*/NEW_RETURN (singleton, (SingletonThreadSafe<TYPE, LOCK>), 0);//}}return &singleton->instance_;}/// Cleanup methodvirtual void cleanup (){SingletonThreadSafe<TYPE, LOCK> *&singleton = SingletonThreadSafe<TYPE, LOCK>::instance_i();if (singleton){delete this;SingletonThreadSafe<TYPE, LOCK>::instance_i () = 0;}}/// Get pointer to the SingletonThreadSafe instance.static SingletonThreadSafe<TYPE, LOCK> *&instance_i(void){static SingletonThreadSafe<TYPE, LOCK> *singleton_ = 0;return singleton_;}~SingletonThreadSafe (void){}protected:/// Default constructor.SingletonThreadSafe (void){}/// Contained instance.TYPE instance_;};extern "C" void CLEANUP_DESTROYER_NAME (Cleanup *object);#define DEL_SINGLETON(X) CLEANUP_DESTROYER_NAME(X::instance_i())}#endif
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型