diff options
| author | chai <chaifix@163.com> | 2019-01-12 21:48:33 +0800 | 
|---|---|---|
| committer | chai <chaifix@163.com> | 2019-01-12 21:48:33 +0800 | 
| commit | 8b00d67febf133e89f6a0bfabc41feed555dc4a9 (patch) | |
| tree | fe48ef17c250afa40c2588300fcdb5920dba6951 /src/libjin/common/singleton.hpp | |
| parent | a907c39756ef6b368d06643afa491c49a9044a8e (diff) | |
*去掉文件前缀je_
Diffstat (limited to 'src/libjin/common/singleton.hpp')
| -rw-r--r-- | src/libjin/common/singleton.hpp | 84 | 
1 files changed, 84 insertions, 0 deletions
diff --git a/src/libjin/common/singleton.hpp b/src/libjin/common/singleton.hpp new file mode 100644 index 0000000..015c9b0 --- /dev/null +++ b/src/libjin/common/singleton.hpp @@ -0,0 +1,84 @@ +#ifndef __JE_SINGLETON_H__ +#define __JE_SINGLETON_H__ + +#include "object.h" +#include "exception.h" + +namespace JinEngine +{ + +    /// +    /// Singleton base class. +    /// +    template<class T> +    class Singleton : public Object +    { +    public: +        /// +        /// Get singleton.  +        ///  +        /// @param Singleton instance of class. +        /// +        static T* get() +        { +            if (_instance == nullptr) +                _instance = new T; +            return _instance; +        } + +        /// +        /// Destroy instance of singleton. +        /// +        static void destroy() +        { +            delete _instance; +            _instance = nullptr; +        } + +    protected: +        /// +        /// Singleton constructor. +        /// +        Singleton()  +        { +            // Check singleton. +            if (_instance) +                throw Exception("This is a singleton."); +        }; + +        /// +        /// Singleton destructor. +        /// +        virtual ~Singleton() {}; + +        /// +        /// Singleton instance. +        /// +        static T* _instance; + +    private: +        /// +        /// Singleton copy constructor. +        /// +        /// @param singleton Singleton of class. +        /// +        Singleton(const Singleton& singleton); + +        /// +        /// Singleton assignment. +        /// +        /// @param singleton Singleton of class. +        /// +        Singleton& operator = (const Singleton& singleton); + +    }; + +    /// +    /// Singleton instance. +    /// +    template<class T>  +    T* Singleton<T>::_instance = nullptr; + +} // namespace JinEngine + +#endif // __JE_SINGLETON_H__
\ No newline at end of file  | 
