"Resource Acquisition Is Initialization" (RAII) 是C++中的一种编程惯用法,用于管理资源(如内存、文件句柄、锁等)的分配和释放。RAII的核心思想是:资源的生命周期与对象的生命周期绑定,即资源的获取和释放通过对象的构造和析构函数来管理。
理解 RAII 的几个关键点:
- 资源的获取在对象构造时完成: 当一个对象被创建时,它的构造函数会被调用。在这个构造函数中,资源(如内存、文件、锁等)被分配或初始化。这保证了对象一旦被创建,所需的资源也就准备好了。
- 资源的释放在对象析构时自动完成: 当一个对象超出其作用域或被显式销毁时,它的析构函数会被调用。在析构函数中,资源会被释放或清理。这确保了不会有资源泄露(如内存泄露),因为一旦对象不再需要,资源也会自动被释放。
- 异常安全性: RAII 确保了即使在异常发生时,资源也能被正确释放。由于C++在对象销毁时会自动调用析构函数,哪怕异常中途抛出,仍然能够正确释放资源。
参考资料
1.《Programming -- Principles and Practice Using C++ (3rd Edition)》—— Bjarne Stroustrup