C中的自殺函式和C 中的自殺類

2021-06-16 01:17:51 字數 806 閱讀 7671

今天看glibc 2.7的記憶體分配**,注意到乙個詭異現象:某函式的指標自我清空。也就是說,此函式指標只能用一次。具體說來就是指向函式malloc_hook_ini的函式指標__malloc_hook。於是自己嘗試了一下這類函式的寫法。

//  function-suicide 

int testfunction(void);

int (*ptf)(int, int) = testfunction;

int testfunction()

就是這樣。ptf()只能出現一次,然後就不能再用了。我估計這是為了防止乙個初始化函式被多個執行緒呼叫,或者多次呼叫設下的保險。

當然本質上這點並不奇怪,函式指標ptf一旦呼叫,就進入了其所指向的函式testfunction內部,這時ptf就沒有用處了,可以對其為所欲為——而究竟是什麼函式對其為所欲為並沒有限制。

乙個簡單(但可能不那麼讓人愉快)的比方是,信使p把一封信從a送到b,而信的內容的第一句就是「乾掉p,然後再看下面的內容」。p就是函式指標,a是呼叫者函式,b是主體函式。

自殺類恐怕更刺激:在其建構函式裡寫入delete this...則類似classname *p = classname;的操作都能使p成為野指標,當然這時再delete p就會彈出報錯對話方塊。如果要速效的,classname c;則可以立刻出現報錯。可見,這樣的類永遠無法產生可用的物件例項,名副其實的自殺類呢。

class testclass

;testclass::testclass()

……c語言果然是博大精深啊……

關於C 物件的自殺

關於c 物件的自殺 jason lee csdn 2010 11 05 前兩天看到乙個問題,乙個類的成員函式是否可以delete this 據出題者的意思來看,是認為這樣的問題一般比較少人會遇到,而這樣就可以了解一下對方對未知問題的分析和解決思路。出於這點,我也想看看自己的思路,所以就先自己思考了一...

C 類中的函式

類的訪問修飾符 private 私有成員,僅類內可見,類成員預設是私有的 protected 受保護的成員,類內和子類可見 public 公有成員,對外可見 訪問修飾符的作用範圍是到下個訪問修飾符或者到類的結尾 友元函式 include using namespace std class test ...

C 類中的函式過載

1,本課程最初階段就學習了函式過載,但是那時研究目標僅限於全域性函式,到目前 為止我們學習了三種函式 1,全域性函式 2,普通成員函式 3,靜態成員函式 這三種不同型別的函式之間是否可以構成過載,這是本文討論的主要內容 2,函式過載回顧 1,函式過載的本質為相互獨立的不同函式 2,c 中通過函式名和...