
RAIIRAIIResource Acquisition Is Initialization资源获取即初始化。其核心思想为在对象构造时获取资源在对象析构时释放资源把资源的生命周期绑定到对象生命周期上资源包括文件句柄、互斥锁、数据库连接、socket以及堆内存等。示例如下classFileWrapper{public:FileWrapper(constchar*name){fpfopen(name,r);}~FileWrapper(){if(fp)fclose(fp);}private:FILE*fp;};它存在以下作用避免资源泄露即使函数中途return或抛异常析构仍会进行。提高异常安全性不用在每条返回路径上都手动释放资源。代码更清晰资源的申请和释放都封装在对象中调用者不容易写错。