美文网首页
Effective c++ 学习笔记(第二部分:资源管理)

Effective c++ 学习笔记(第二部分:资源管理)

作者: 懒生活 | 来源:发表于2021-10-16 22:09 被阅读0次

    Effective c++ 学习笔记(第二部分:资源管理)

    马上就要进入item13的学习总结了,从item13开始到item17都是资源管理相关的技巧。依据我自己多年的开发经验, 数组越界和内存泄露是最让人头疼的问题,这些很隐蔽,而且随着项目的维护和更新,类似问题的定位成本很高。对指针,资源的接口设计也很能体现一个开发者的水平和经验。

    1什么是资源

    系统有限的东西,不用的时候是要还回来的,毕竟资源是共享的,只占用不归还,必然会导致最后没有任何资源和使用。需要动态维护的最常见资源是动态allocate的内存。文件操作符,互斥锁, 系统字体,系统笔刷等也都是有限的资源,在你的程序不用的时候,就要及时的归还。Scott在item13-item17中,主要描述的是对动态allocate的内存管理。

    2资源管理的要素与难点

    最重要的是在不用的时候,不要忘了释放资源。难点是如果是依靠人显示代码去释放资源,会存在维护上的很多风险,比如:
    1)释放语句前,被某个分支直接return或者break了
    2)释放语句前,遭遇了异常,直接导致释放语句没有实际执行。
    3)也有一定的可能开发者就会忘记写释放语句。
    c++不像java有垃圾回收机制(只管new,不需要人为的去delete)。c++要求开发者要自己考虑资源的释放时机。提供了资源管理的灵活性但也增加了开发维护的难度。

    利用c++的特性来降低资源维护的难度

    我们希望
    1)资源在不用的时候,可以自动释放。
    2)自动释放的语句不会因为return或者异常而跳过导致没有执行
    这里利用c++对象在释放的时候自动调用析构函数的特性可以满足上述的两个要求。如果把资源封装在对象里面,那么对象在离开作用域的时候都会自动调用析构函数,只要在资源对象的析构函数中处理资源释放就可以。即使再遇到return,或者异常,因为离开作用域的原因,系统保证会去调用资源对象的析构函数,这样我们就确保了资源一定会被释放。
    c++在上述思路的基础上,引入了智能指针,能够更好的维护资源。后续的章节就是从如何使用智能指针开始展开。

    相关文章

      网友评论

          本文标题:Effective c++ 学习笔记(第二部分:资源管理)

          本文链接:https://www.haomeiwen.com/subject/apqioltx.html