1.函数指针的一般原理
一个函数只能做两件事情:被调用和返回其地址。
函数指针就是利用了返回其地址的特性。
一个典型的用法如下。
void error(string str)
{
cout <<str<<endl;
}
void (*efct)(string);
int _tmain(int argc, _TCHAR* argv[])
{
efct = error;
efct("erro");
}
恩,不过如此。
2. 个typedef 结合使用
typedef 返回类型(*新类型)(参数)
3.nginx内存池中的ngx_pool_cleanup_t
nginx中定义了这样一个清理函数
typedef void (*ngx_pool_cleanup_pt)(void *data);
struct ngx_pool_cleanup_s {
ngx_pool_cleanup_pt handler;
void *data;
ngx_pool_cleanup_t *next;
};
看一下它是怎么清理的:
ngx_pool_cleanup_t* c;
for (c = pool->cleanup; c; c = c->next) {
if (c->handler) {
c->handler(c->data);
}
}
哇,太经典了,一个结构体中不仅保存着数据,而且保存了这些数据的清理函数,而这些清理函数是
作为结构体一部分的,当需要摧毁整个内存池的时候,直接调用这个结构体保存的清理函数,简直
用得太巧妙了。