RefCount.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. //
  2. // "$Id: RefCount.h 42122 2017-12-20 09:04:23Z zhang_xiulang $"
  3. //
  4. // Copyright (c)1992-2050, ZheJiang Dahua Technology Stock CO.LTD.
  5. // All Rights Reserved.
  6. //
  7. // Description:
  8. // Revisions: Year-Month-Day SVN-Author Modification
  9. //
  10. #ifndef __MEMORY_ATOMIC_REF_COUNTER__
  11. #define __MEMORY_ATOMIC_REF_COUNTER__
  12. #include <Infra/IntTypes.h>
  13. namespace Dahua {
  14. namespace Memory {
  15. /// 包含强弱引用的计数器类, 用于实现强弱引用智能指针
  16. class CRefCount
  17. {
  18. /// 禁止复制构造与赋值操作
  19. CRefCount(CRefCount const&);
  20. CRefCount& operator=(CRefCount const&);
  21. public:
  22. /// 构造函数, 计数值都初始为1
  23. CRefCount();
  24. /// 析构函数
  25. ~CRefCount();
  26. /// 强引用计数值增1, 不影响弱引用计数值
  27. /// \retval 返回操作后的计数值
  28. int32_t incStrong();
  29. /// 强引用计数值减1, 不影响弱引用计数值
  30. /// \retval 返回操作后的计数值
  31. int32_t decStrong();
  32. /// 仅当强引用计数不为0时增1
  33. /// \retval 返回操作后的计数值
  34. int32_t tryIncStrong();
  35. /// 取当前强引用计数值
  36. int32_t getStrong();
  37. /// 弱引用计数值增1, 不影响强引用计数值
  38. /// \retval 返回操作后的计数值
  39. int32_t incWeak();
  40. /// 弱引用计数值减1, 不影响强引用计数值
  41. /// \retval 返回操作后的计数值
  42. int32_t decWeak();
  43. /// 取当前弱引用计数值
  44. /// \retval 返回操作后的计数值
  45. int32_t getWeak();
  46. private:
  47. int32_t m_internal[8]; ///< 内部成员, 32字节
  48. };
  49. } // namespace Memory
  50. } // namespace Dahua
  51. #endif // __MEMORY_ATOMIC_REF_COUNTER__