看板 C_and_CPP 關於我們 聯絡資訊
OK, 也許我描述得不夠清楚, 現在綜合兩篇的內容 class Base { public: void open() { // ... this->doOpen(); // ... this->opening_ = true; } void close() { // ... this->doClose(); // ... this->opening_ = false; } virtual ~Base() { // this->close(); assert( !this->opening_ ); } private: virtual void doOpen() = 0; virtual void doClose() = 0; bool opening_; }; class Derived { virtual void doOpen() {} virtual void doClose() {} }; ==== 我就是希望在 Base 這個層級就能在解構時自動回收 但是礙於 destructor 內不能呼叫 virtual function 目前我只有檢查 flag 我只想問在這個狀況下有沒有比較好的做法 -- 自High筆記(半荒廢) http://legnaleurc.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.49.38
fragileness:什麼叫做"在 Base 這個層級就能在解構時自動回收" 10/07 02:20
fragileness:如果Derived::doClose()的內容也要使用者自己填 10/07 02:21
fragileness:那我覺得叫使用者再多填一個destructor並不過分 10/07 02:21
holymars:Derived open出來的資源,當然是要在Derived的destructor 10/07 10:22
holymars:處理啊@@ 你現在是希望Base的dtor可以幫Derived回收資源 10/07 10:23
scwg:如果一定想用這個順序, 建議你不要在 destruct 的時候再做 10/07 12:56
scwg:另外訂個 (non-virtual) void Release() 去 call doClose() 10/07 12:57
scwg:然後在 destruct 之前手動 release... 10/07 12:58
legnaleurc:應該說我希望 Base 會確保一定會呼叫到 close 吧 10/07 13:50
legnaleurc:因為我是用 Factory 包 shared_ptr<Base>丟回Derived 10/07 13:52
legnaleurc:當shared_ptr在delete Base時,我希望它確保close有 10/07 13:53
legnaleurc:被呼叫到。@scwg 那就是Base::close 在做的事 10/07 13:54
holymars:...那不就在Dtor裡明確呼叫Base::close()就好了嗎 10/07 15:32
holymars:欸不對我看錯了 close裡還有個virtual fucntion call 10/07 15:37