C 的建構函式與析構函式?

時間 2021-05-10 02:32:28

1樓:

關於C++的問題,你的心中要有兩個概念,乙個是記憶體的分配,二是記憶體的初始化。

C++的建構函式有兩個作用

第一,你必須要有乙個建構函式,compiler才會去給你分配記憶體。

第二,分配了記憶體之後,再用建構函式去初始化記憶體。

函式體為空,因為類中的每乙個成員都有預設建構函式和析構函式(否則是無法編譯的),都是在呼叫預設建構函式在初始化。

2樓:

建構函式析構函式設計的初衷是給程式設計師乙個時間,可以初始化物件、分配資源,撤銷資源。類似於win32的WM_CREATE WM_DESTORY訊息。

3樓:

c++ primer 第五版第262頁合成預設建構函式:

1.如果存在類內的初始值,用它來初始化成員;

2.否則, 預設初始化該成員。

4樓:

只有在幾種有限的情況下,編譯器才會合成不為空的建構函式和析構函式。這種建構函式只會初始化必要的而非所有的成員,析構函式同理。

如果不滿足這幾種情況,編譯器只會宣告一些trivial的,也就是你說的空的建構函式和析構函式,它們不作任何初始化操作。

至於是哪幾種有限的情況,題主自己搜一下吧,網上資料很多的。

感覺題主的問題在於不太明白初始化的概念。

5樓:陳碩

你先告訴我你學C++看的是哪本書?看看到底是書上寫錯了還是你理解錯了。

class

Foo;

那麼 Foo 的建構函式做了什麼?

6樓:

其實有什麼不能理解的呢。建構函式來說的話,為空就是沒有對任何資料進行初始化,但是你卻試圖輸出物件資料成員的時候有了值?拜託,那是定義資料成員時編譯器給的預設值。

建構函式為空就是沒有做任何建構函式該做的活。

至於析構函式,為空的話,就是每碰到物件結束了生存期,就自動呼叫析構函式。儘管為空,呼叫析構函式的時候編譯器就會清理棧記憶體的物件,就像面向過程時區域性變數結束生存期的時候,也是會自動清除記憶體的啊,只不過那時候沒有析構函式告訴編譯器要清理記憶體了。

退一步講,建構函式和析構函式是編譯器預設新增的,如果不為空,那怎麼會有普適性呢?我的意思是,想象一下,如果不為空,你該預設地為五花八門的類新增乙個怎樣的統一的預設構造和析構函式?

C 析構函式丟擲異常導致程式退出?

腐子 假如Widget類的析構函式有可能發生異常,那麼在析構std vector的時候,假如第乙個元素析構時候有個異常被丟擲,此時系統繼續執行,在第二個元素被析構時又丟擲異常。在兩個異常同時存在的情況下,程式若不是結束執行就是導致不明確行為。本例會導致不明確的行為。使用其它容器時也是如此。因此,不要...

為什麼不能在析構函式中呼叫虛函式?

CHAN.K 析構函式中呼叫虛函式不會呈現出多型!因為,當你呼叫某個繼承層次中的析構函式的時候,編譯系統會預設從該層開始,往後的派生類已經都被析構了,所以 也就不能出現多型的情況了.當然,這麼寫編譯器也不會報錯 唐沂 Effective C 條款9講建構函式中不要呼叫虛函式已經很清楚了,析構函式與其...

C 中,既然有了建構函式, 那麼拷貝建構函式存在的意義是?

白白小白 copy constructor 建立物件的時候,用同一類的物件對它進行初始化的時候會自動呼叫拷貝建構函式。Aa Ab a 或者傳參Ab f b 或者返回值是物件Af 語法 public A constA a 我們首先希望傳參的時候不會對原來的物件產生修改,所以使用了const型別 避免迴...