当前位置:网站首页>13 以对象管理资源
13 以对象管理资源
2022-07-26 10:32:00 【JeffyGao】
条款- 13 以对象管理资源
Remember:
1- 为防止资源泄露,请使用 RAII(资源获取初始化) 对象,它们在构造函数中获得资源并在析构函数中释放资源。
2- 两个常被使用的 RAII class 分别是 tr1::shared_ptr 和 auto_ptr。前者通常是较佳选择,因为其 copy 行为比较直观。若选择 auto_ptr,复制动作会使它(被复制物)指向 null。
所谓 资源 就是,一旦使用了它,将来就必须还给系统。C++ 最长用的就是动态分配内存,如果不释放的话,就会造成内存泄露。
本条款针对的是所分配的 class 对象。
常规做法:在使用完对象后就delete其对象。当代码数量较多的时候一般用函数进行封装。
但是这样会遇到一个问题:有时候还没来得及删除时,就遇到一个 return。这样就导致了内存泄露。
解决方法:C++ 的“析构函数自动调用机制”。
两种常用的只能指针: auto_ptr、tr1::shared_ptr。
当正常地使用 析构函数自动删除的时候两个智能指针形式差不多。但是当使用复制行为进行赋null的时候,tr1::shared_ptr明显看着更舒服。
【注】auto_ptr 和 tr1::shared_ptr 都是在析构函数内做 delete 而不是 deletep[]。那意味着在动态分配而得的 array 身上使用 auto_ptr或 shared_ptr是个馊主意。其实定义vector、string就可以代替array了。
边栏推荐
- [C language] LINQ overview
- [Halcon vision] threshold segmentation
- RecyclerView最后一条显示不全或显示部分的问题解决
- [Halcon vision] software programming ideas
- 分布式锁解决方案之Redis实现
- String null to empty string (what does empty string mean)
- 图片随手机水平移动-陀螺仪。360度设置条件
- modelsim 安装教程(应用未安装)
- json-c库的简单使用——将json文件转换为struct.
- 【Halcon视觉】图像的傅里叶变换
猜你喜欢

.NET 开源框架在工业生产中的应用

Okaleido生态核心权益OKA,尽在聚变Mining模式
![[Halcon vision] morphological corrosion](/img/f9/f01dd3340824ff28c84cf7bb52882e.png)
[Halcon vision] morphological corrosion

The difference between equals and = =

MLX90640 红外热成像仪测温传感器模块开发笔记(六)红外图像伪彩色编码

centos8(liunx)部署WTM(ASP.NET 5)使用pgsql

The CLOB field cannot be converted when querying Damon database

hx711 数据波动大的问题

议程速递 | 7月27日分论坛议程一览

js 获得当前时间,时间与时间戳的转换
随机推荐
[Halcon vision] morphological expansion
卸载魅族应用商店
MLX90640 红外热成像仪测温传感器模块开发笔记(六)红外图像伪彩色编码
L2-005 set similarity (intersection of vector and set)
Prevent XSS attacks
About automatic operation on Web pages
议程速递 | 7月27日分论坛议程一览
移动端H5开发常用技巧总结
Navicat15连接本地虚拟机的Mysql(Centos7)
Function template parameters (where are the function parameters)
Some cutting-edge research work sharing of SAP ABAP NetWeaver containerization
[C language] LINQ overview
分布式锁解决方案之Redis实现
canvas上传图片base64-有裁剪功能-Jcrop.js
.NET操作Redis sorted set有序集合
数据库函数
原生JS-获取transform值 x y z及rotate旋转角度
js,e.pageX、pageY模态框拖动
面试第二家公司的面试题及答案(二)
Introduction to data analysis | kaggle Titanic mission (I) - > data loading and preliminary observation