c++ 初识智能指针

c++ 专栏收录该内容
18 篇文章 0 订阅
智能指针

  智能指针是一种自主的内存回收机制,是一种面向对象的指针。我们知道代码中栈上得内存是由系统开辟和释放(函数结束,退栈)的,而堆上得内存是人为开辟、人为释放的。那么我们在程序中new动态申请了一块堆内存,如果忘记释放该内存或是函数异常退出,程序还没来得及执行delete操作,就会造成内存泄露。
  学习了c++中的对象后,我们知道对象的生成有两步,即开辟内存和调用构造函数;对象的销毁也有两步,即调用析构函数和释放内存。而调用析构函数是由系统来完成的,因此智能指针要想实现内存由系统回收,可以借助对象来实现。

具体实现代码如下
#include<iostream>

template<typename T>
class SmartPtr
{
public:
    SmartPtr(T* ptr)
      :mptr(ptr)
      {}
    ~SmartPtr()
    {
       delete[] mptr;
    }
    T& operator*()
    {
       return *mptr;
    }
    T* operator->()
    {
       return mptr;
    }
private:
    T* mptr;
};
class Test
{
public:
    Test(int a):ma(a){}
    void Show()
    {
       std::cout<<ma<<std::endl;
    }
private:
    int ma;
};

int main()
{
    int* p=new int();//需要自己释放
    delete p;

    SmartPtr<int> sp=new int; //不需自己要释放
    *sp=30;
    SmartPtr<Test> sp2=new Test(40); //不需要自己释放
    sp2->Show();//->单目运算符//先调用sp2.operator->()返回Test*;再指向的方式调用Test中的show函数 
    return 0;
}
  • 0
    点赞
  • 2
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值