C++ 引用计数类模板

举报
鱼酱 发表于 2022/01/07 00:54:47 2022/01/07
【摘要】 引用计数类模板 template<typename T>class CRSIRefCnt{public: CRSIRefCnt() : m_pstObject(NULL) { } CRSIRefCnt(T* pstObject) : m_pstObject(pstObject) { ...

引用计数类模板



  
  1. template<typename T>
  2. class CRSIRefCnt
  3. {
  4. public:
  5. CRSIRefCnt() :
  6. m_pstObject(NULL)
  7. {
  8. }
  9. CRSIRefCnt(T* pstObject) :
  10. m_pstObject(pstObject)
  11. {
  12. if(m_pstObject)
  13. {
  14. m_pstObject->AddRef();
  15. }
  16. }
  17. CRSIRefCnt(const CRSIRefCnt<T>& stOther) :
  18. m_pstObject(stOther.m_pstObject)
  19. {
  20. if (m_pstObject)
  21. m_pstObject->AddRef();
  22. }
  23. ~CRSIRefCnt()
  24. {
  25. if (m_pstObject)
  26. m_pstObject->Release();
  27. }
  28. CRSIRefCnt<T>& operator=(const CRSIRefCnt<T>& stOther)
  29. {
  30. if (this != &stOther && *this != stOther)
  31. {
  32. if (m_pstObject)
  33. m_pstObject->Release();
  34. m_pstObject = stOther.m_pstObject;
  35. if (m_pstObject)
  36. m_pstObject->AddRef();
  37. }
  38. return *this;
  39. }
  40. bool operator==(const CRSIRefCnt<T>& stOther) const
  41. {
  42. return m_pstObject == stOther.m_pstObject;
  43. }
  44. bool operator!=(const CRSIRefCnt<T>& stOther) const
  45. {
  46. return m_pstObject != stOther.m_pstObject;
  47. }
  48. const T& operator*() const
  49. {
  50. return *m_pstObject;
  51. }
  52. T& operator*()
  53. {
  54. return *m_pstObject;
  55. }
  56. const T* operator->() const
  57. {
  58. return m_pstObject;
  59. }
  60. T* operator->()
  61. {
  62. return m_pstObject;
  63. }
  64. bool IsValid() const
  65. {
  66. return m_pstObject != NULL;
  67. }
  68. private:
  69. T* m_pstObject;
  70. };


文章来源: yujiang.blog.csdn.net,作者:鱼酱2333,版权归原作者所有,如需转载,请联系作者。

原文链接:yujiang.blog.csdn.net/article/details/60742181

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。