首页 > 其他分享 >智能指针

智能指针

时间:2023-02-26 17:35:15浏览次数:30  
标签:CSmartPtr return pT nullptr 智能 pCnt ptr 指针

 1 template <typename T>
 2 class CSmartPtr
 3 {
 4 public:
 5     CSmartPtr(T* p = nullptr)
 6     {
 7         if (p != nullptr)
 8         {
 9             m_p = p;
10             m_pCnt = new int(1);
11         }
12     }
13     CSmartPtr(const CSmartPtr& ptr)
14     {
15         if (ptr.m_p == nullptr)
16         {
17             return;
18         }
19         m_p = ptr.m_p;
20         m_pCnt = ptr.m_pCnt;
21         ++(*m_pCnt);
22     }
23     ~CSmartPtr()
24     {
25         --(*m_pCnt);
26         if (*m_pCnt == 0)
27         {
28             delete m_p;
29             delete m_pCnt;
30         }
31         m_p = nullptr;
32         m_pCnt = nullptr;
33     }
34     CSmartPtr& operator=(const CSmartPtr& pT)
35     {
36         //1. 判断是不是自己
37         if (this == &pT)
38         {
39             return *this;
40         }
41         //2. 清理自身,减少引用计数
42         if (m_p != nullptr)
43         {
44             --(*m_pCnt);
45             if (*m_pCnt == 0)
46             {
47                 delete m_p;
48                 delete m_pCnt;
49             }
50             m_p = nullptr;
51             m_pCnt = nullptr;
52         }
53         //3. 拷贝目标,增加引用计数
54         m_p = pT.m_p;
55         m_pCnt = pT.m_pCnt;
56         if (pT.m_pCnt != nullptr)
57         {
58             ++(*m_pCnt);
59         }
60 
61         return *this;
62     }
63     T* operator->()
64     {
65         return m_p;
66     }
67     T& operator*()
68     {
69         return *m_p;
70     }
71     //CFoo* Get(){return m_p;}
72 private:
73     T* m_p = nullptr;
74     int* m_pCnt = nullptr;
75 };

 

标签:CSmartPtr,return,pT,nullptr,智能,pCnt,ptr,指针
From: https://www.cnblogs.com/yewu1/p/17157129.html

相关文章

  • 空值指针和void*指针
    1.空指针常量一个表示0值的整数常量,叫做空指针常量。例如:0,(void*)0,void*NULL空指针常量可以赋值给任何指针类型,因为它是变体类型(void*)更倾向于用NULL表示空指针常量i......
  • 时间击败100%用户的快慢指针删除链表中的倒数第n个节点算法
    //给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 ///***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNoden......
  • 大型企业智能化-数字化转型基础-关注点
    大型企业智能化-数字化转型基础-关注点      业务中台,多半是传统的成本中心,把后台的资源整合成前台打仗需要的“中间件”,方便被随需调用。典型的业务中台如字节跳动......
  • 数组和指针
    一维数组和指针先回忆一下,数组是由一系列类型相同的元素组成。如:charch[4];/*4个字符的数组*/intin[4];/*4个整数的数组*/floatfl[4];/*4个浮点数的数......
  • 如何定制一个智能洒水装置(养狗/养花人士请进)
    目录如何用智能地教狗狗上厕所如何定制一个智能洒水装置背景上一篇文章中提到了,我实现了一个自动检测狗狗有没有进厕所的功能。现在我们家的狗狗用它那不算大的小脑......
  • 07. 指针
    一、指针的相关概念1.1、地址与指针与变量  内存区的每一个字节都有一个编号,这就是“地址”。如果在程序中定义了一个变量,在对程序进行编译或运行时,系统就会给这个变量......
  • 模切ERP的智能备料、智能分切,业财一体化解决方案
    精细化管理做得好,可以使一个模切工厂的管理化繁为简,将复杂的现场人、机、料、法、环简单化,条理化。运用点晴模切ERP系统提供一整套业财一体化解决方案,实现模切企业车间生产......
  • C语言指针错误
    以下指针代码出现的错误,因该是第二个for循环格式使用了逗号导致代码出现紊乱,但是在调试代码却没有报错。知道的回复一下。intmain(){ int*p,i,a[10]; p=a; for(i......
  • 【AI拯救世界】智能对话额度提升
    说明:一、转账前,请在公众号发送-id-查看id二、转账时备注id号三、套餐如下所示 套餐一:30条/9.99元  套餐二:80条/19.99元   套餐三:200条/49.99元......
  • 智能工厂数字化方案
    ​智能工厂是在数字化工厂的基础上,以实现生产过程和经营业务最优化为目的,利用物联网技术和监控技术加强信息管理服务,提高生产过程可控性、减少生产线人工干预,合理计划排程,实......