当前位置: 首页 > article >正文

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


http://www.kler.cn/news/283042.html

相关文章:

  • 萤石云 C++ SDK使用指南
  • STL容器中 list(双向链表)的增删改查
  • 51单片机——定时器
  • Unity获取SceneView尺寸
  • Docker 镜像导出与加载:从入门到精通
  • redis(未授权访问漏洞)
  • Mysql集群相关技术
  • 数分基础(03-3)客户特征分析-Tableau
  • 为什么需要对即将上线的系统进行压力测试
  • 数学建模学习(120):使用Python实现基于AHP的供应商选择分析
  • k8s中service对象
  • github源码指引:共享内存、数据结构与算法:平衡二叉树set带有互斥接口的
  • 怎样还原空白试卷?2024快速空白试卷还原软件合集
  • 算法练习题: 文本左右对齐
  • 【Java-存储超大整数】
  • Git 分支操作全解析:创建、切换、合并、删除及冲突解决
  • SpringBoot+Vue餐馆点菜系统小程序
  • Spring MVC学习路线指南
  • Windows Edge浏览器的兼容性问题
  • 命令模式的实际应用案例:从电梯控制系统到文本编辑器
  • Ruby宝石光芒:探索SEO优化的瑰宝工具与库
  • 13.DataLoader 的使用
  • LuaJit分析(二)luajit反编译工具
  • Linux——驱动——自动设备
  • Nginx: 缓存, 不缓存特定内容和缓存失效降低上游压力策略及其配置示例
  • 基于python文案转语音并输出-自媒体等职业副业均可使用,不受他人限制
  • 从“云、边、端”的统一管理,为传统工厂数字化转型赋能的智慧地产开源了
  • OpenAI API Error: Resource not found - Text Summarization in NodeJS
  • QT中引入SQLITE3数据库
  • 自定义全局变量在SpringBoot的应用