美文网首页
代码健壮性——资源管理

代码健壮性——资源管理

作者: XDgbh | 来源:发表于2018-07-04 18:29 被阅读7次

    可管理的资源类型

    malloc/new的动态堆内存,文件描述符,文件指针,临时文件,同步对象等等

    管理资源流程

    • 步骤1:申请分配资源
    • 步骤2:检查资源分配是否成功,若失败则函数返回非0退出码,成功则继续
    • 步骤3:正常处理流程
    • 步骤4:若流程失败要提前退出,则应该先释放前面申请的所有资源,再退出
    • 步骤5:流程处理完毕,释放资源,函数返回(一般返回0退出码表示正常)

    举例

    char *ReadFromFile(const char *filename, size_t length)
    {
      char *buffer = new char[length];  //步骤1:申请分配资源
      if(!buffer)                        // 步骤2:检查资源分配是否成功
      {
        return NULL;
      }
      int fd = open(filename, O_RDONLY);    //申请文件描述符资源,只读打开文件
      if(fd == -1)                      //检查是否申请成功
      {
        delete [] buffer;
        buffer = NULL;
        return NULL;
      }
      size_t bytes_read = read(fd, bufffer, length);  //读取文件也可能失败,也要处理
      if(bytes_read != length)      //或者发生错误返回-1 == bytes_read
      {
        delete [] buffer;
        buffer = NULL;
        close(fd);
        return NULL;
      }
      close(fd);                //正常退出前关闭文件
      return buffer;
    }
    

    相关文章

      网友评论

          本文标题:代码健壮性——资源管理

          本文链接:https://www.haomeiwen.com/subject/mgzeuftx.html