代码健壮性——资源管理

可管理的资源类型

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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容