【RAII 思想】C 实现 RAII 思想
以下是一个使用C语言实现RAII思想的例子,使用结构体来封装资源和相关的操作函数:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int* data;
void (*init)(int*);
void (*release)(int*);
} Resource;
void init_resource(int* data) {
*data = 0;
printf("Resource initialized.\n");
}
void release_resource(int* data) {
free(data);
printf("Resource released.\n");
}
void do_something(Resource* res) {
*(res->data) = 42;
printf("Data set to %d.\n", *(res->data));
}
int main() {
Resource res;
res.data = (int*)malloc(sizeof(int));
res.init = init_resource;
res.release = release_resource;
res.init(res.data);
do_something(&res);
res.release(res.data);
return 0;
}
在上面的例子中,定义了一个结构体Resource,包含一个int类型的指针data和两个函数指针init和release。init函数用于初始化资源,release函数用于释放资源。在main函数中,首先使用malloc函数动态分配了一个int类型的内存,然后调用init函数初始化资源。在do_something函数中,使用了资源data。在main函数结束时,调用release函数释放资源。
这个例子中,使用结构体封装了资源和相关的操作函数,实现了类似RAII的效果。在结构体的构造函数中获取资源,在结构体的析构函数中释放资源,确保资源的正确获取和释放。