精華區beta Programming 關於我們 聯絡資訊
※ 引述《milochen.bbs@ptt.cc (作事專心很重要)》之銘言: > ※ 引述《tinlans ( )》之銘言: > : 首先澄清一個觀念, > : destructor 不可以被繼承, > : 一定要在 base class 裡實作完畢。 > : 所以你需要一個 Spec.cpp: > : #include "Spec.h" > : AbstractBase::~AbstractBase() throw() > : { > : } > : 這樣就結束了, > : 因為你說 Spec.h 不能改, > : 所以我沒跟你說直接在 Spec.h 那邊把 ; 換成 { } 就好。 > 再請問一下 > 那這樣子的話virtual destructor 的意義在那邊? > 譬如就如下面程式來說 > 小弟原本以為說 virtual destructor的功用是 > 當我作delete someobj動作的時候,它是會去執行 ConcreteDerived的destructor。 > 因此如果我對AbstractBase有不同的concrete class時,那virtual destructor > 就會很聰明的它 這destructor 導向至正確的concrete class上的destructor。 > 所以我原本的這觀念是不是錯誤的。 你原本想的沒錯 (不過你上面 "就會很聰明..." 那句文字有些亂 ^^") 我猜你搞錯了 tinlans 的話 其實他的意思只是說 base class 的 virtual destructor 要有實作就是了 實作就是要有 { /*some code*/ } (而非像是 pure virtual function 是留到 derived class 來實作) #include <stdio.h> class XD { public: XD(){ puts("XD ctor"); } virtual ~XD(){ puts("XD dtor"); } }; class XDD : public XD { public: XDD(){ puts("XDD ctor"); } ~XDD(){ puts("XDD dtor"); } }; int main(){ XD *xd0 = new XDD; delete xd0; } ====== output ====== XD ctor XDD ctor XDD dtor XD dtor -- , 秘密情人 (bbs.cse.ttu.edu.tw) ~\ Post From: 61-228-193-213.dynamic.hinet.net