1.回调函数是什么,原理?
因为可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调用函数。
简而言之,回调函数就是允许用户把需要调用的函数的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。
回调函数机制:
1、定义一个函数(普通函数即可);
2、将此函数的地址注册给调用者;
3、特定的事件或条件发生时,调用者使用函数指针调用回调函数。
注:为什么要特定事件或条件发生?不应该随时都可以调用回调函数吗?
以下是回调函数的两种使用方式(简单理解):
#include <stdio.h>
typedef int(*callback)(int,int);
int add(int a,int b,callback p){
return (*p)(a,b);
}
int add(int a,int b){
return a+b;
}
int main(int argc,char *args[]){
int res = add(4,2,add);
printf("%d\n",res);
return 0;
}
————————————————
原文链接:https://blog.csdn.net/yidu_fanchen/article/details/80513359
在这个例子中,可以看到,我们定义了一个callbak的函数指针,参数为两个int,返回值为int,通过调用函数地址来进行简单的相加运算。
首先明确一个概念,回调函数也是普通函数,而不是什么神秘的东西。至于为什么叫回调函数,是因为程序通过参数把该函数的函数指针传递给了其它函数,在那个函数里面调用这个函数指针就相当于调用这个函数,这样的过程就叫回调,而被调用的函数就叫回调函数。看得出来,回调的本质是函数指针传递,所以想要理解回调机制,先要理解函数指针。
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记/注册回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。回答完毕。
作者:常溪玲
链接:https://www.zhihu.com/question/19801131/answer/13005983
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.构造函数里面可以有回调函数吗?
理论上可以,但是会遇到一些问题:
回调中会用到this指针,如果正在执行的是父类的构造函数,子类还没有构造好,在回调中调用了父类的虚函数就会出问题。
回调会用到this指针,那么可能会导致线程不安全。