TAG

首都機能移轉 (2) 歌詞 (2) 靠北文 (40) 戲言 (30) 糟糕 (7) ACG (23) Assembly (2) Boost (2) C (31) C++ (69) CMake (4) CSIE (67) Debian (34) Design_Pattern (2) Django (1) Eclipse (1) en_US (13) FFmpeg (3) FoolproofProject (26) FreeBSD (2) Git (4) GNU_Linux (65) IDE (5) Java (11) JavaScript (19) KDE (15) Khopper (16) KomiX (3) Kubuntu (18) Life (1) Lighttpd (2) Mac_OS_X (2) Opera (1) PHP (2) PicKing (2) Programing (21) Prolog (1) Python (7) QSnapshot (2) Qt (30) Qt_Jambi (1) Regular_Expression (1) Shell_Script (7) Talk (98) VirtualBox (7) Visual_Studio (13) Windows (18) zh_TW (36)

2009年3月12日 星期四

Watch out the destructors of super classes

在 C++ 中,如果設計者沒有發生失誤的話,通常可以由 destructor 的宣告來判斷該 class 對繼承的態度:

public and non-virtual

此類 class 不打算讓任何 class 繼承它,繼承可能會導致錯誤行為。

public and virtual

此類 class 提供了多型的特性,並且預期到會有 subclasses 的使用;使用指標刪除物件是安全的。

protected and non-virtual

較為少見,此類 class 提供了介面給 subclasses ,但是卻不希望客戶使用 super class 的指標進行刪除,也不希望客戶具現化出 super class 的實體。

private

這個 class 完全是為了戰術應用而生的,如 Singleton 等;它應該要自己解決生命週期的問題。
說是這麼說啦,不過現在我看過的 code 都是用 public ,只有 virtual or non-virtual 的差別而己。
像是 policy classes 的 destructor 就用途來說似乎都該是 protected and non-virtual ,因為沒人會用 pointer of super class 去刪除它們,也不太可能被實體化。
雖然說語法也只是買保險,真正想亂搞的話誰都擋不住。

沒有留言:

張貼留言