RAII(Resource Acquisition Is Initialization,资源获取就是初始化)指资源在我们拿到时就已经初始化,一旦不再需要该资源,就可以自动释放该资源。
对于 C++来说,资源在构造函数中初始化(可以在构造函数中调用单独的初始化函数),在析构函数中释放或清理。常见的情形就是在函数调用中创建C++对象时分配资源,在 C++对象出了作用域时将其自动清理和释放(不管这个对象是如何出作用域的,不管是否因为某个中间步骤不满足条件而导致提前返回,也不管是否正常走完全部流程后返回)。
资源泄露和死锁等问题具有非常强的隐蔽性,如果在生产环境中出现这些问题,则难以复现、排查和定位问题。理解并熟练使用RAII惯用法不仅能让我们的代码更加简洁和模块化,也能让我们在开发阶段避免一部分资源泄漏和死锁问题。