加入收藏 | 设为首页 | 会员中心 | 我要投稿 宣城站长网 (https://www.0563zz.cn/)- 数据湖、行业智能、边缘计算、开发、备份!
当前位置: 首页 > 站长资讯 > 动态 > 正文

资源,如何还的潇洒?

发布时间:2021-02-24 12:24:54 所属栏目:动态 来源:互联网
导读:看起来稳妥,但存在若干情况f函数可能无法执行到delete pa语句,也就会造成资源泄漏,例如如下情况: 或许因为「」区域内的一个过早的 return 语句; 或许因为「」区域内的一个循环语句过早的continue 或 goto 语句退出; 或许因为「」区域内的语句抛出异常,

看起来稳妥,但存在若干情况f函数可能无法执行到delete pa语句,也就会造成资源泄漏,例如如下情况:

  • 或许因为「…」区域内的一个过早的 return 语句;
  • 或许因为「…」区域内的一个循环语句过早的continue 或 goto 语句退出;
  • 或许因为「…」区域内的语句抛出异常,无法执行到 delete。

当然可以通过谨慎地编写程序可以防止这一类错误,但你必须想想,代码可能会在时间渐渐过去后被修改,如果是一个新手没有注意这一类情况,那必然又会再次有内存泄漏的可能性。

为确保 A 返回的资源都是被回收,我们需要将资源放进对象内,当对象离开作用域时,该对象的析构函数会自动释放资源。

「智能指针」是个好帮手,交给它去管理指针对象。

对于是由动态分配(new)于堆内存的对象,指针对象离开了作用域并不会自动调用析构函数(需手动delete),为了让指针对象能像普通对象一样,离开作用域自动调用析构函数回收资源,我们需要借助「智能指针」的特性。

常用的「智能指针」有如下三个:

  • std::auto_ptr( C++ 98 提供、C++ 11 建议摒弃不用 )
  • std::unique_ptr( C++ 11 提供 )
  • std::shared_ptr( C++ 11 提供 )


(编辑:宣城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读