RAII在文件与数据库连接管理中的应用
除了锁管理,RAII在文件和数据库连接管理中如何应用?如何设计一个RAII包装类自动管理文件句柄或数据库连接的生命周期?移动语义如何帮助RAII类?
回答
小字辈
RAII文件管理:class File { FILE* fp; public: File(const char* name) { fp = fopen(name,"r"); if(!fp) throw; } ~File() { if(fp) fclose(fp); } File(File&& o) : fp(o.fp) { o.fp=nullptr; } /* 不可拷贝 */ };。RAII数据库连接类:构造时连接DB、析构时断开,可配合连接池实现资源复用。关键设计要点:①禁止拷贝(或实现为共享句柄);②提供移动语义——转移资源所有权,源对象置为空;③release()可释放所有权;④异常安全的获取/释放。移动语义使RAII类可以作为函数返回值和容器元素高效传递。例如unique_ptr<FILE, decltype(&fclose)>是典型的文件RAII。数据库连接RAII确保即使发生异常连接也正确归还连接池。原则:所有资源(内存、锁、文件、socket、数据库连接)都应通过RAII管理,避免裸资源操作。