代码健壮性——资源管理

2018-07-04  本文已影响7人  XDgbh

可管理的资源类型

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

管理资源流程

举例

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;
}
上一篇下一篇

猜你喜欢

热点阅读