thinking in C++ 讀書日誌(六)
阿新 • • 發佈:2018-10-31
第六章 初始化與清除
這一章說實話沒什麼東西。我用了一小時看完了。不過關於解構函式我一直有一個疑問,有興趣的同學到我部落格討論一下吧。
我們都知道,在c++裡當宣告一個類時,如果你不寫建構函式,系統就會自動生成一個預設建構函式。由於此建構函式往往不盡人意,我們一般會重寫建構函式。且當我們定義了自己的建構函式之後,它就會“覆蓋”預設建構函式。即系統就不會再產生預設構造函數了。
這點是否對解構函式也適用呢?
然而書上很多解構函式都是這個樣子的:~A(){cout<<"A is destructured;"}
也就是說,這樣不僅覆蓋了預設解構函式,且在其實現部分只寫了句廢話。
讓我很難接受。
難道預設的解構函式只是個形式?因為利用一些變數的生命週期,即使不去析構,記憶體也會被自動釋放的。否則的話,我們究竟給予預設的解構函式多大的“期望”呢?
請教一下以下三種情況所能分別達到的析構效果
假設有一個類如下:
class A
{
int a;
int b[];
int *c;
public:
A(){a=1;b=new int[3];c=new int;}
//~~~~~~~~~~~~~~~~~ //用三種方法寫這一行
};
關於~~~~~~~~~~~~一行:
第一種情況:什麼都不寫。
第二種情況:~A(){cout<<"A is destructured";}
第三種情況:~A(){delete []b;delete c;}
這三種情況對a,b,c對應記憶體的釋放情況分別是怎樣的呢?