#pragma once #include "Tool/Common.h" #include "Tool/Allocator.h" #include /** * \~chinese * @brief 引用计数器 */ class RefObject : protected Noncopyable { public: /// \~chinese /// @brief 增加引用计数 void Retain(); /// \~chinese /// @brief 减少引用计数 void Release(); /// \~chinese /// @brief 获取引用计数 uint32_t GetRefCount() const; static void *operator new(size_t size); static void operator delete(void *ptr); static void *operator new(size_t size, std::nothrow_t const &) noexcept; static void operator delete(void *ptr, std::nothrow_t const &) noexcept; static void *operator new(size_t size, void *ptr) noexcept; static void operator delete(void *ptr, void *place) noexcept; virtual ~RefObject(); protected: RefObject(); private: std::atomic ref_count_; };