C++中如何避免资源泄漏

来源:互联网 发布:python tushare 实例 编辑:程序博客网 时间:2024/06/05 12:02

请看下面一段代码

{    object *p = new object();    ...    delete p;}

如果在执行delete这行代码之前该片段产生异常,程序会在发生异常点停止并产生栈展开,所以不会执行delete语句,造成资源泄漏。解决的方法如下

{    share_ptr p(new object());    ...}
用智能指针替代普通指针,当发生异常并进行栈展开过程时,程序会析构已经构造完毕的类,从而避免了资源泄漏。上面运用的是共享指针,但可以根据实际需求决定使用共享指针或独占指针。


再请看下面一段代码

object makeObject(){    return new object();}   {    object *p=makeObject();    ...}
由于申请资源和使用资源不在同一个代码区,很有可能造成我们忘记释放资源,因为该资源并不是由我们申请的。当然可以用智能指针解决该问题,但是还有另外一种更加灵活的办法。

class manager{public:        manager(object *tt):p(tt){    }    ~manager(){        delete p;    }    object *p;};{    manager target(makeObject());    ...}
在构造函数中负责接管该资源,在析构函数中负责释放该资源。


1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 榕树盆景长的高怎么办? 2岁宝宝看书弯腰低头怎么办 excel表格打开很慢怎么办 3d模型有红线框怎么办 电视页面加载时错误怎么办 投屏显示加载视频错误怎么办 word遇到问题需要关闭怎么办 画眼线看不出来怎么办 14岁眼皮很松怎么办啊 ps存不了psd格式怎么办 花草上有白色物怎么办 ps抠出来有白边头发怎么办 脸上结痂掉了有红印怎么办 海棠花瓣干枯怎么办茎变软 微信上的图片打不开怎么办 口红吊兰老掉叶子怎么办 翠叶竹芋叶子卷怎么办 牙有龋齿垫底以后酸怎么办 事业单位辞职请示30天不批怎么办 孕早期吃了油菜怎么办 实体店买到翻新苹果手机怎么办 太阳花叶子蔫了怎么办 刚摘下来的多肉怎么办 购车4s不给合同怎么办 橙光游戏2.0商城怎么办 飞羽花卷叶了怎么办 孔雀竹芋叶子发黄卷曲怎么办 孔雀竹芋叶子黄了卷了怎么办 飞羽竹芋叶尖黄怎么办 十七岁还是胸小怎么办 英雄联盟连接不上服务器怎么办 彩叶草叶子蔫了怎么办 家里种葱老是死怎么办 非洲菊生虫子了怎么办 多肉的花剪下来怎么办 结石痛怎么办怎么止疼 喝玫瑰花茶胃疼怎么办 卡地亚戒指掉色怎么办 苹果8plus掉电快怎么办 苹果8plus耗电快怎么办 卡地亚戒指划痕怎么办