c++ 智能指针的实现

 1 #include <iostream> // 标准的输入输出
  2 using namespace std;
  3 
  4 class Person {
  5 public:
  6     Person(int a)
  7     {
  8     ¦   m_A = a;
  9     };
 10     void showage()
 11     {
 12     ¦   cout << "showage函数调用" << endl;
 13     }
 14 
 15     ~Person()
 16     {
 17     ¦   cout << "Person析构调用了" << endl;
 18     }
 19 
 20     int m_A;
 21 };  
 22     
 23 // 创建智能指针 
 24 class spointer {
 25     
 26 public: 
 27     // 提供托管函数
 28     
 29     spointer(Person* person)
 30     {
 31     ¦   this->person = person;
 32     }   
 33     
 34     // 析构函数
 35     ~spointer()
 36     {
 37     ¦   cout << " 智能指针析构了" << endl;
 38     ¦   if (this->person != NULL) {
 39     ¦   ¦   delete this->person;
 40     ¦   ¦   this->person = NULL;
 41     ¦   }
 42     }
 43     
 44     // 重载->让智能指针像Person *一样去使用
 45     Person* operator->()
 46     {
 47     ¦   return this->person;
 48     }
 49 
 50     // 重载* *sp可以直接使用
 51     Person* operator*()
 52     {
 53     ¦   return this->person;
 54     }
 55 
 56 private:
 57     // 内部托管一个Person对象
 58     Person* person;
 59 };
 60 
 61 void test01()
 62 {
 63     // 开辟到了栈上,会自动释放
 64     spointer sp(new Person(10));
 65     sp->showage();
 66     (*sp)->showage();
 67 }
 68 int main()
 69 {
 70     test01();
 71     return 0;
 72 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值