C中的自杀函数和C++中的自杀类

来源:互联网 发布:淘宝联盟和一淘 知乎 编辑:程序博客网 时间:2024/05/18 02:44

今天看glibc 2.7的内存分配代码,注意到一个诡异现象:某函数的指针自我清空。也就是说,此函数指针只能用一次。具体说来就是指向函数malloc_hook_ini的函数指针__malloc_hook。于是自己尝试了一下这类函数的写法。

//  Function-Suicide int TestFunction(void);int (*pTF)(int, int) = TestFunction;int TestFunction(){    pTF = NULL;    return 0;}

就是这样。pTF()只能出现一次,然后就不能再用了。我估计这是为了防止一个初始化函数被多个线程调用,或者多次调用设下的保险。

当然本质上这点并不奇怪,函数指针pTF一旦调用,就进入了其所指向的函数TestFunction内部,这时pTF就没有用处了,可以对其为所欲为——而究竟是什么函数对其为所欲为并没有限制。

一个简单(但可能不那么让人愉快)的比方是,信使P把一封信从A送到B,而信的内容的第一句就是“干掉P,然后再看下面的内容”。P就是函数指针,A是调用者函数,B是主体函数。

自杀类恐怕更刺激:在其构造函数里写入delete this...则类似ClassName *p = ClassName;的操作都能使p成为野指针,当然这时再delete p就会弹出报错对话框。如果要速效的,ClassName c;则可以立刻出现报错。可见,这样的类永远无法产生可用的对象实例,名副其实的自杀类呢。

class TestClass{public:    TestClass();protected:private:};TestClass::TestClass(){    printf("This is construct function./n");    delete this;    printf("And I have suicided ");}

……C语言果然是博大精深啊……

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机外屏裂了内屏进水了怎么办 小米2s手机忘了解锁图案怎么办 红米note5手机屏烂了怎么办 网上买好高铁票身份证没带怎么办 高铁票买好了身份证丢了怎么办 苏州园区社保卡丢了怎么办 大学办的社保卡丢了怎么办 毕业六年了大学社保卡丢了怎么办 医保卡丢了补办后卡里余额怎么办 银行卡丢了记不住卡号怎么办 哈尔滨医保卡挂失后又找到了怎么办 孩子在哈尔滨户口在外地医保怎么办 椒江二桥通行证被扣走了怎么办 住建委查到买房材料不真怎么办 房子租出去被别人又租出去了怎么办 在成都乘出租车房产证掉了怎么办 电信不限量卡限网速了怎么办 only实体店换货没有小票怎么办 运管所包车单不给盖章怎么办 上海留学生落户过了取号时间怎么办 电信固话怎么办才能显示自己公司 日本跟团签证没有资产证明怎么办 摇号手机号换了密码忘了怎么办 小客车摇号的账号密码忘了怎么办 去银行交违章罚款单子丢了怎么办 我的身份证被别人办了信用卡怎么办 北京驾驶证在深圳扣了分怎么办 c照一次被扣12分怎么办 教师资格证认定申请表填错了怎么办 外地车在北京违章没有牡丹卡怎么办 护士辞职了原单位不给延续怎么办 护士证注册的单位倒闭了怎么办 护士证注册的医院倒闭了怎么办 显示发货了但没物流信息怎么办 考科目三被别人举报了怎么办 科目一考了5没过怎么办 常州c1驾驶证满了12分怎么办 预约科目三成功后没交钱怎么办 预约成功后驾校不提交档案怎么办 c2刚满一年的驾照扣12分怎么办 怀孕6个月咳嗽很厉害怎么办