C++ 资源管理要点:
- 使用智能指针:
- C++11 引入了更科学的智能指针,以便自动管理对象的生命周期。
- 三种主要的智能指针类型包括:
unique_ptr
、shared_ptr
和weak_ptr
。unique_ptr
拥有独占的对象所有权,当指针超出作用域时自动释放资源。shared_ptr
可以共享对象所有权,使用引用计数技术,当计数器归零时自动释放资源。weak_ptr
是一种弱引用指针,可以引用shared_ptr
但不会增加引用计数。
- 智能指针的使用可以显著减少内存泄漏的风险。
- 手工管理资源需仔细:
- 在某些情况下,可能需要手动管理动态分配的内存。
- 使用
new
运算符分配内存后,必须在不再使用时通过delete
关键字显式释放内存。
- 正确使用构造和析构函数:
- 在析构函数中释放对象所占用的资源,如关闭文件、释放动态内存、释放锁等。
- 利用 RAII(Resource Acquisition Is Initialization)技术,在对象构造时分配资源,析构时释放资源。
- 避免资源泄漏:
- 资源泄漏指程序未能正确释放和管理资源,导致资源浪费或不可用。
- 养成良好的编码习惯,分配资源后务必在不再使用时释放。
- 可以利用工具如 valgrind 和 lint 来检测资源泄漏。
- 保障异常安全:
- 当发生异常时,必须确保已分配的资源得到释放,以避免资源泄漏。
- 可以使用 try-catch 块来处理异常,并在 catch 块中释放资源。
- 使用智能指针时,异常处理通常是自动的,因为智能指针会在异常时自动释放资源。
综上,C++ 资源管理涉及智能指针的使用、手动管理动态内存、关闭文件和释放资源、适当使用析构函数、避免资源泄漏以及异常处理等方面。这些要点对于提高程序的性能和可靠性,以及减少资源泄漏和资源浪费的风险至关重要。
更进一步地,可参见如下详细讨论:
- 不可失去对已分配资源的控制
- 不可失去对已分配内存的控制
- 不可访问未初始化或已释放的资源
- 使资源接受对象化管理
- 资源的分配与回收方法应成对提供
- 资源的分配与回收方法应配套使用
- 不应在模块之间传递容器类对象
- 不应在模块之间传递非标准布局类型的对象
- 对象申请的资源应在析构函数中释放
- 对象被移动后应重置状态再使用
- 构造函数抛出异常需避免相关资源泄漏
- 不可重复释放资源
- 用 delete 释放对象需保证其类型完整
- 用 delete 释放对象不可多写中括号
- 用 delete 释放数组不可漏写中括号
- 不可释放非动态分配的内存
- 在一个表达式语句中最多使用一次 new
- 流式资源对象不应被复制
- 避免使用变长数组
- 避免使用在栈上动态分配内存的函数
- 局部数组不应过大
- 避免不必要的内存分配
- 避免分配大小为零的内存空间
- 避免动态内存分配
- 判断资源分配函数的返回值是否有效
- 在 C++ 代码中禁用 C 资源管理函数
标签:释放,C++,ptr,使用,要点,资源管理,资源,指针 From: https://www.cnblogs.com/safe-rules/p/18215361