Advertisement

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)

还没有任何评论哟~