当前位置:网站首页>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了。
边栏推荐
猜你喜欢
随机推荐
头歌 Phoenix 入门(第1关:Phoenix 安装、第2关:Phoenix 基础语法)
The problem of incomplete or partial display of the last recyclerview is solved
hx711 数据波动大的问题
Interview questions and answers of the first company (I)
[Halcon vision] image filtering
Introduction to data analysis | kaggle Titanic mission (I) - > data loading and preliminary observation
结构体操作报错:Segmentation fault (core dumped)
centos8(liunx)部署WTM(ASP.NET 5)使用pgsql
软件打不开了
[Halcon vision] threshold segmentation
Controller返回JSON数据
Introduction to data analysis | kaggle Titanic mission
Deduct daily question 838 of a certain day
[socket] the three handshakes are completed in listen, and accept only takes out one connection from the queue that completes the connection
议程速递 | 7月27日分论坛议程一览
Review of database -- 1. Overview
2022pta平时训练题(1~10题字符串处理问题)
数据库的复习--3.SQL语言
卸载魅族应用商店
事务的传播性propagation





![[Halcon vision] morphological expansion](/img/ce/abaca036fce5b67dfe6ac361aecfea.png)
