C++ 资源管理要点总结

C++ 资源管理要点:

  1. 使用智能指针
    • C++11 引入了更科学的智能指针,以便自动管理对象的生命周期。
    • 三种主要的智能指针类型包括:unique_ptrshared_ptrweak_ptr
      • unique_ptr拥有独占的对象所有权,当指针超出作用域时自动释放资源。
      • shared_ptr可以共享对象所有权,使用引用计数技术,当计数器归零时自动释放资源。
      • weak_ptr是一种弱引用指针,可以引用shared_ptr但不会增加引用计数。
    • 智能指针的使用可以显著减少内存泄漏的风险。
  2. 手工管理资源需仔细
    • 在某些情况下,可能需要手动管理动态分配的内存。
    • 使用new运算符分配内存后,必须在不再使用时通过delete关键字显式释放内存。
  3. 正确使用构造和析构函数
    • 在析构函数中释放对象所占用的资源,如关闭文件、释放动态内存、释放锁等。
    • 利用 RAII(Resource Acquisition Is Initialization)技术,在对象构造时分配资源,析构时释放资源。
  4. 避免资源泄漏
    • 资源泄漏指程序未能正确释放和管理资源,导致资源浪费或不可用。
    • 养成良好的编码习惯,分配资源后务必在不再使用时释放。
    • 可以利用工具如 valgrind 和 lint 来检测资源泄漏。
  5. 保障异常安全
    • 当发生异常时,必须确保已分配的资源得到释放,以避免资源泄漏。
    • 可以使用 try-catch 块来处理异常,并在 catch 块中释放资源。
    • 使用智能指针时,异常处理通常是自动的,因为智能指针会在异常时自动释放资源。

综上,C++ 资源管理涉及智能指针的使用、手动管理动态内存、关闭文件和释放资源、适当使用析构函数、避免资源泄漏以及异常处理等方面。这些要点对于提高程序的性能和可靠性,以及减少资源泄漏和资源浪费的风险至关重要。

更进一步地,可参见如下详细讨论:

  1. 不可失去对已分配资源的控制
  2. 不可失去对已分配内存的控制
  3. 不可访问未初始化或已释放的资源
  4. 使资源接受对象化管理
  5. 资源的分配与回收方法应成对提供
  6. 资源的分配与回收方法应配套使用
  7. 不应在模块之间传递容器类对象
  8. 不应在模块之间传递非标准布局类型的对象
  9. 对象申请的资源应在析构函数中释放
  10. 对象被移动后应重置状态再使用
  11. 构造函数抛出异常需避免相关资源泄漏
  12. 不可重复释放资源
  13. 用 delete 释放对象需保证其类型完整
  14. 用 delete 释放对象不可多写中括号
  15. 用 delete 释放数组不可漏写中括号
  16. 不可释放非动态分配的内存
  17. 在一个表达式语句中最多使用一次 new
  18. 流式资源对象不应被复制
  19. 避免使用变长数组
  20. 避免使用在栈上动态分配内存的函数
  21. 局部数组不应过大
  22. 避免不必要的内存分配
  23. 避免分配大小为零的内存空间
  24. 避免动态内存分配
  25. 判断资源分配函数的返回值是否有效
  26. 在 C++ 代码中禁用 C 资源管理函数

 

 
 
posted @ 2024-05-27 13:58  幸运泡泡  阅读(3)  评论(0编辑  收藏  举报