diff options
author | chai <chaifix@163.com> | 2018-08-18 13:26:31 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-08-18 13:26:31 +0800 |
commit | a68d5cf198a87bb3e14d03dc7347ed52134355d4 (patch) | |
tree | 90caa0e10762a3795eb9a835e5678cbfd4507fdb /src/lua/common/Reference.hpp | |
parent | e257f98dbf5c0064037b966a353e0eb1ffcba0a8 (diff) |
*update
Diffstat (limited to 'src/lua/common/Reference.hpp')
-rw-r--r-- | src/lua/common/Reference.hpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/lua/common/Reference.hpp b/src/lua/common/Reference.hpp new file mode 100644 index 0000000..f330323 --- /dev/null +++ b/src/lua/common/Reference.hpp @@ -0,0 +1,72 @@ +#ifndef __JIN_COMMON_REFERENCE_H +#define __JIN_COMMON_REFERENCE_H + +namespace jin +{ +namespace lua +{ + + /*abstract*/class Reference + { + public: + void retain() + { + ++count; + } + + void release() + { + if (--count <= 0) + delete this; + } + + protected: + Reference(void* obj) + : count(1) + , object(obj) + { + } + Reference(const Reference&); + virtual ~Reference() + { + } + + void* object; + int count; + + }; + + template<class T> + class Ref : public Reference + { + public: + Ref(T* obj) + : Reference(obj) + { + } + + ~Ref() + { + T* obj = (T*)object; + delete obj; + } + + T* operator->() + { + return (T*)object; + } + + T* getObject() + { + return (T*)object; + } + + private: + Ref(const Ref<T>& ref); + + }; + +} +} + +#endif
\ No newline at end of file |