代码健壮性——资源管理
2018-07-04 本文已影响7人
XDgbh
可管理的资源类型
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;
}