C/C++ 资源自动生成清理
发布时间
阅读量:
阅读量
函数/语句块层面的自动资源释放
方式二.借助智能指针(本质跟二一样)
void func()
{
shared_ptr sp = shared_ptr(new int[5]);
}
优点:提供封装完善的接口,可直接调用
缺点:仅适用于释放通过new分配的内存对象
方式三.借助变量的cleanup属性
对通过new分配的数组进行清理操作
void Delete(int** ptr)
{
If (*ptr != 0) delete[] *ptr;
}
void func()
{
Int* array attribute((cleanup(Delete))) = new int[5];
}
对通过fopen打开的文件句柄进行清理
void Close(FILE** ptr)
{
If (*ptr != NULL) fclose(*ptr);
}
void func2()
{
FILE* fp attribute((cleanup(Close))) = fopen(“abc.txt”, r”);
}
优势:该机制与C++中的析构函数功能相似,允许用户自行定义清理函数,从而实现对各类资源的释放操作
劣势:此特性仅适用于C语言环境,若在C++中使用则可能导致资源泄露问题,但编译过程仍可正常通过
【
全部评论 (0)
还没有任何评论哟~
