1. 程式人生 > >thinking in C++ 讀書日誌(六)

thinking in C++ 讀書日誌(六)

第六章 初始化與清除

這一章說實話沒什麼東西。我用了一小時看完了。不過關於解構函式我一直有一個疑問,有興趣的同學到我部落格討論一下吧。 

我們都知道,在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對應記憶體的釋放情況分別是怎樣的呢?