應該在無指針的類中聲明/實現destructior嗎? 有沒有/沒有它的優勢?C++ - 應該在無指針的類中聲明/實現destructior嗎?
我的男人是:
class Point
{
public:
int X, Y;
Point(int x, int y);
//~Point(void); //should I uncoment it and implement empty destructor ?
}
應該在無指針的類中聲明/實現destructior嗎? 有沒有/沒有它的優勢?C++ - 應該在無指針的類中聲明/實現destructior嗎?
我的男人是:
class Point
{
public:
int X, Y;
Point(int x, int y);
//~Point(void); //should I uncoment it and implement empty destructor ?
}
destructior應該在無指針類中聲明/實現嗎?
不需要[條件適用]。編譯器會爲你生成一個。
只有當你想執行某些特定的東西時,你才應該提供它,編譯器不會。
例如:
一般拇指法則是:
「如果您需要提供複製構造函數或複製賦值運算符,那麼您很可能還需要提供您自己的析構函數。」
通常,這條規則被稱爲Rule of Three。
[報考條件]如果你的類是爲了充當繼承的基類,你的實現將需要一個基類指針指向派生類對象調用delete
那麼你需要提供在基類中標記爲virtual
,否則將導致未定義行爲。
有有/沒有它的任何好處?
沒有,因爲編譯器也是這樣,所以不需要額外的輸入。
...或者如果你想要析構函數是虛擬的。但'Point'不會成爲一個好的基類。 – aschepler
@aschepler:您在編輯中引起了我的注意。添加了更多細節以使其完全清楚。 –
不,你不應該有一個非virtual
析構函數,如果你不管理資源。
如果您希望從該類派生並計劃多態刪除(即delete
通過基類指針派生的對象),則需要使用一個virtual
析構函數。
事實上,你不應該直接管理資源,而是有包裝 - 即智能指針而不是原始指針&手動分配/解除分配。
必須閱讀:http://www.parashift.com/c++-faq/dtors.html – abnvp