C++语法小记---智能指针

本文介绍了一种用于缓解内存泄露问题的智能指针实现方案。通过重载指向操作符并确保在析构函数中释放资源,避免了原生指针带来的问题。文章提供了完整的代码示例,展示了如何使用自定义智能指针管理堆上分配的对象。
智能指针
  • 用于缓解内存泄露的问题

  • 用于替代原生指针

  • 军规:只能指向堆空间中的对象或变量

  • 方法

    • 在智能指针的析构函数中调用delete

    • 重载"->"操作符,只能重载成成员函数,且不能有参数

    • 禁止智能指针的算术运算

    • 一块对空间只能被一个智能指针指向

 

例子

 1 #include<iostream>
 2 #include<string>
 3 
 4 using namespace std;
 5 
 6 class Persion
 7 {
 8     string name;
 9     int age;
10 public:
11     Persion(string name, int age)
12     {
13         this->name = name;
14         this->age = age;
15         cout<<"Persion()"<<endl;
16     }
17     
18     void show()
19     {
20         cout<<"name = "<<name<<endl;
21         cout<<"age = "<<age<<endl;
22     }
23     
24     ~Persion()
25     {
26         cout<<"~Persion()"<<endl;
27     }
28 };
29 
30 template<typename T>
31 class Pointer
32 {
33     T* m_ptr;
34 public:
35     Pointer(T* ptr)
36     {
37         m_ptr = ptr;
38     }
39     
40     Pointer(const Pointer& other)
41     {
42         m_ptr = other.m_ptr;
43         const_cast<Pointer&>(other).m_ptr = NULL;
44     }
45     
46     Pointer& operator = (const Pointer& other)
47     {
48         if(this != &other)
49         {
50             if(m_ptr)
51             {
52                 delete m_ptr;
53             }
54             
55             m_ptr = other.m_ptr;
56             const_cast<Pointer&>(other).m_ptr = NULL;
57         }
58         return *this;
59     }
60     
61     T* operator -> ()
62     {
63         return m_ptr;
64     }
65     
66     ~Pointer()
67     {
68         if(m_ptr)
69         {
70             delete m_ptr;
71         }
72         m_ptr = NULL;
73     }
74 };
75 
76 int main()
77 {
78     Pointer<Persion> p = new Persion("zhangsan", 20);
79     Pointer<Persion> p1 = NULL;
80     p1 = p;
81     p1->show();
82     return 0;
83 }

 

转载于:https://www.cnblogs.com/chusiyong/p/11295230.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值