看板 C_and_CPP 關於我們 聯絡資訊
class A { public: ........一些pure virtual function virtual ~A() = 0; }; 有其他class會繼承A 其實我code中 class是寫interface 其實就是struct 但他的destructor不給我宣告成pure 他一定要我定義 所以一定要改成 virtual ~A(){}... 不然就是 外頭在 定義一次A::~A(){} 但我覺得很沒道理 interface不就是包一堆pure virtual function 給別人繼承後 override嗎? 還是其實在外面寫個空的destructor{} 其實也沒差 如果使用者寫 A* p =new A; 因為virtual ~A()=0 他也會compile error說 abstract class不給你產生instance 所以其實我在外面寫A::~A(){} 是正確的做法沒有關係??? 不太懂 正統的作法該怎麼寫耶 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.64.222
tinlans:就算是 pure virtual destructor 也是需要一份定義。 05/18 15:08
QQ29:我以為~B就是~A的定義耶 跟override類似? 05/18 15:09
tinlans:destructor 不能被 override,所以規定要給定義。 05/18 15:10
tinlans:宣告就照樣寫 = 0,定義就放空的就好了。 05/18 15:10
tinlans:我常開一個檔案,或是在某個檔案裡專門用註解劃一區出來擺 05/18 15:13
tinlans:這些空定義。 05/18 15:13