正文:
atexit可以注册多个回调,而这些会是一个线性表,里面储存了你注册的函数地址.当main函数结束的时候会调用
?
而内部
?
do exit函数内部会执行核心代码:
?...可以看出上面代码逻辑
从后往前调用,执行函数指针, 而这个函数则是你注册的函数回调.
E3代理含义:
明白其上面的 atexit函数的原理,那么现在看看其E3内部的实现
?...E2函数内部则会调用析构函数,有人会说,为什么不直接将析构注册为函数回调,这样直接调用atexit不就在释放的时候,从后往前依次调用析构的了吗....答:
因为atexit的参数的c约定回调,而析构是thiscall,调用约定,所以内部必须包含一层才可以....atexit函数注册的回调,这样在析构的时候则调用E2即可.
7.E2函数内部是真正的调用析构的.