C++——RAII机制

1. 什么事RAII?

RAII是Resource Acquisition Is Initialization(wiki上面翻译成 “资源获取就是初始化”)的简称,是C++语言的一种管理资源、避免泄漏的惯用法。它保证在任何情况下,使用对象时先构造对象,最后析构对象。

利用C++构造的对象最终会被销毁的原则。RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,使之始终保持有效,最后在对象析构的时候,释放构造时获取的资源

2. RAII的原理

资源的使用一般经历三个步骤:

a.获取资源

b.使用资源

c.销毁资源

资源的销毁往往是程序员经常忘记的一个环节,如何让资源自动销毁呢?解决问题的方案:RAII,它充分的利用了C++语言局部对象自动销毁的特性来控制资源的生命周期。

3. RAII使用

a.设计一个类封装资源

b.在构造函数中初始化

c.在析构函数中执行销毁操作

d.使用时声明一个该对象的类

4. RAII举例

class FileRAII{  
public:  
    FileRAII(FILE* aFile):file_(aFile){}  
    ~FileRAII() { fclose(file_); }//在析构函数中进行文件关闭  
    FILE* get() {return file_;}  
private:  
    FILE* file_;  
}; 

void Func()  
{  
  FILE *fp;  
  char* filename = "test.txt";  
  if((fp=fopen(filename,"r"))==NULL)  
  {  
      printf("not open");  
      exit(0);  
  }  
  FileRAII fileRAII(fp);  
  //do sth... // 如果 在使用fp指针时产生异常 并退出  
  // 那么 fileRAII在栈展开过程中会被自动释放,析构函数也就会自动地将fp关闭  
 
  // 即使所有代码是都正确执行了,也无需手动释放fp,fileRAII生命期在此结束时,析构函数会自动执行!      
 } 

RAII的好处在于它提供了一种资源自动管理的方式,当产生异常、回滚等现象时,RAII可以正确地释放掉资源。

你可能感兴趣的:(C++)