類前向宣告

2021-04-12 21:40:58 字數 824 閱讀 5121

class a

~a()

};void del(a *ptr)

int main()

**正常執行,delete p;先執行類析構函式,通知系統這塊記憶體上的資料已經無效無需維護了,然後使用operator delete 釋放這塊記憶體

class a;

void del(a *ptr)

class a

~a()

};int main()

vs2005:warning c4150: deletion of pointer to incomplete type 'a'; no destructor called

前向宣告注意的地方,這個時候宣告,承諾在檔案的某個地方存在a的定義,但是對於函式del

的語句delete ptr;它編譯的時候,看不到類a具體的情況,所以看不到析構函式的情況

這樣它只釋放記憶體,而並的未通知系統這塊記憶體的資料已經無效,所以對於系統而言,它認為

這塊記憶體上的資料仍是乙個完整的物件,因為並無析構函式通知它

由此可見,編譯,鏈結的過程

對於函式真正的功能執行,時存在順序的,注意點

在iso,incomplete-type;

函式可以宣告,鏈結的時候,指令**塊只存的一塊,都去那裡找,型別宣告由於用在多個函式之中

所以每個函式鏈結的時候去找型別定義塊,速度慢,而且不能馬上的知道編譯過程的錯誤,比如是否存在某個成員函式,這樣情形需在編譯的時候就能檢測到,如果把查詢型別的定義塊的工作放在編譯處,則速度非效率,

所以折中一點,定義放在使用處的前面,這樣類定義塊已經經過編譯,在編譯使用**的時候,即可知道使用的正確與否個人的看法

C 類前向宣告

在乙個群內看到的訊息,關於類的前向宣告 宣告乙個foo類,這個宣告,有時候也叫做前向宣告 forward declaration 在宣告完這個foo類之後,定義完這個foo類之前的時期,foo類是乙個不完全的型別 incomplete type 也就是說foo類是乙個型別,但是這個型別的一些性質 比...

類的前向宣告

在我們看一些c 標頭檔案的時候,經常可以看到某些類的宣告但卻找不到定義。如 class abc 僅僅宣告,沒有定義 通常後面還會有定義指向這個型別的指標或引用,如 abc pointer abc pointer 這種形式稱之為類的前向宣告 引用。在宣告之後,定義之前,類abc是乙個不完全型別 inc...

類的前向宣告

class person void show1 person k cout上述 在友元函式的類外實現中使用了該類,則需在之前宣告,上述 已做宣告。但是上述 依然會報錯,因為類的提前宣告,編譯器只是知道了person這是乙個類,該類的具體細節 例如成員變數 編譯器並不知道,所以此時person又叫做不...