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)

2008年11月27日 星期四

我的記憶力就跟狗屎一樣(2)

上次不知道哪個人問我為什麼要在純抽象類別[?]上強制宣告一個純虛擬解構式[?],我一時忘記原因了。
今天寫到另一個專案時才想到,那是因為C++預設的解構式是非虛擬的,使用預設的版本可能會出錯。
寫出程式的當下都會覺得理所當然,但是三個月後它就會變成莫名其妙的咒文。

5 則留言:

  1. 在 C++ 中, in general, 一個 class type 是否有 virtual destructor (繼承過來的也算) 可以視為作者是否將該 class type 設計為可被繼承的指標.

    當然這也有例外, 譬如說沒有任何 non-static member 的 class, 如 traits classes.

    回覆刪除
  2. 這讓我想到一些問題...
    比方說policy classes
    在多重繼承無雙的情況下
    是否每個都會被正確解構...

    回覆刪除
  3. 啥是 "多重繼承無雙"???

    回覆刪除
  4. template< class A< class >, class B, class C >
    class Base : A, B, C {};
    (not really C++ code)

    回覆刪除
  5. 一般來說, policy/traits classes 沒有 "object instance 正確解構" 的問題. 因為 (AFAIK) by definition, policy/traits classes 都沒有 non-static member, 自然也就沒有 virtual function, which has to be non-static.

    另外, 正常來說它們不會直接被拿來做 object instantiation. 雖然可能有些時候為了好寫 code, 會故意拿這些 class 來的 object instance 來做事情, 也不會以 polymorphic 的方式來操作它們. 因此, 還是不會有是否會被正確解構的問題.

    回覆刪除