【C++】RAII思想与智能指针原理——有效避免内存泄露问题

目录

RAII思想

智能指针原理

内存泄露与智能指针


个人主页:东洛的克莱斯韦克-CSDN博客

RAII思想

RAII——用对象的生命周期控制程序资源

一个类有构造函数和析构函数,这两个函数在对象生命的开始和结束自动调用。通过构造函数接管特定的资源,在通过析构函数释放对应的资源。

我们实际上把管理一份资源的责任托管给了一个对象。这种做 法有两大好处:

1.不需要显式地释放资源。

2.采用这种方式,对象所需的资源在其生命期内始终保持有效。

用RAII思想设计一个类

template<class T>
class SmartPtr {
public:
    SmartPtr(T* ptr = nullptr)
       : _ptr(ptr)
   {}
    ~SmartPtr()
   {
        if(_ptr)
            delete _ptr;
   }
    
private:
    T* _ptr;
};

智能指针原理

RAII是智能指针的基石,在RAII思想的设计上,重载*  -> 等操作符,是该类实例化出的对象可以像指针一样使用。

template<class T>
class SmartPtr {
public:
SmartPtr(T* ptr = nullptr)
     : _ptr(ptr)
 {}
~SmartPtr()
 {
     if(_ptr)
         delete _ptr;
 }
T& operator*() {return *_ptr;}
T* operator->() {return _ptr;}
private:
T* _ptr;
};

内存泄露与智能指针

什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内 存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对 该段内存的控制,因而造成了内存的浪费。

内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现 内存泄漏会导致响应越来越慢,最终卡死。

当我们new出一块空间时,如果用普通指针管理该空间的生命周期,难免会有内存泄露的风险。我们可以用一些内存泄露检测的工具或插件规避风险。也可以用智能指针接管资源,让对象的生命周期和资源的生命周期挂钩。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值