2013-01-08 81 views
4

應該在無指針的類中聲明/實現destructior嗎? 有沒有/沒有它的優勢?C++ - 應該在無指針的類中聲明/實現destructior嗎?

我的男人是:

class Point 
{ 
public: 
    int X, Y; 
    Point(int x, int y); 
    //~Point(void);  //should I uncoment it and implement empty destructor ? 
} 
+2

必須閱讀:http://www.parashift.com/c++-faq/dtors.html – abnvp

回答

5

destructior應該在無指針類中聲明/實現嗎?

不需要[條件適用]。編譯器會爲你生成一個。
只有當你想執行某些特定的東西時,你才應該提供它,編譯器不會。
例如:

  • 資源管理(存儲managemnt,文件處理),
  • 測井,
  • 關閉的網絡連接,
  • 在需要每一個對象被銷燬的時間來執行短自定義功能

一般拇指法則是:
「如果您需要提供複製構造函數或複製賦值運算符,那麼您很可能還需要提供您自己的析構函數。」
通常,這條規則被稱爲Rule of Three


[報考條件]如果你的類是爲了充當繼承的基類,你的實現將需要一個基類指針指向派生類對象調用delete那麼你需要提供在基類中標記爲virtual,否則將導致未定義行爲


有有/沒有它的任何好處?

沒有,因爲編譯器也是這樣,所以不需要額外的輸入。

+0

...或者如果你想要析構函數是虛擬的。但'Point'不會成爲一個好的基類。 – aschepler

+0

@aschepler:您在編輯中引起了我的注意。添加了更多細節以使其完全清楚。 –

2

不,你不應該有一個virtual析構函數,如果你不管理資源。

如果您希望從該類派生並計劃多態刪除(即delete通過基類指針派生的對象),則需要使用一個virtual析構函數。

事實上,你不應該直接管理資源,而是有包裝 - 即智能指針而不是原始指針&手動分配/解除分配。