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

來源:互聯網
上載者:User

第六章 初始化與清除

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

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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.