Re: [問題] 多型的自動回收

看板C_and_CPP (C/C++)作者 (眠月)時間16年前 (2009/10/08 12:24), 編輯推噓8(8017)
留言25則, 5人參與, 最新討論串13/13 (看更多)
在 virtual dtor 釋放資源的設計是對的。(這不是基本中的基本嗎?) 這跟他是不是要用 template method pattern 無關。 T 取得的資源就在由 T 來釋放。 他在其他要呼叫 template method 的地方都可以盡情的呼叫沒關係, 但是本質上資源管理是正交的一件事, 「要放掉 T 取得的資源的時候,事情就是在 T 的 dtor 作」 乖乖的把東西在 T::~T() 用 T::doClose() 放掉就對了。 繼承的深度並不是問題, D1::~D1() { D1::doClose() ; } D2::~D2() { D2::doClose() ; } D3::~D3() { D3::doClose() ; } 串一百層也一樣,資源管理這回事就是「每個人管好自己」就對了。 這個觀念不管在哪邊都是一樣, 老實說我一開始就不明白這個問題為什麼是個問題 -_-a 原 po 不要被什麼 template method pattern 迷惑了雙眼阿, 事情很簡單,就是乖乖在 dtor 把資源放掉就對了。 偷懶的話就是把要管的資源用 share_ptr 包住。 這樣什麼都不用管。 -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.160.254.105

10/08 12:27, , 1F
如何被釋放和何時被釋放是兩回事 ...
10/08 12:27, 1F

10/08 12:29, , 2F
而且上一篇也有人回應了,如果繼承不只一層
10/08 12:29, 2F

10/08 12:29, , 3F
呼叫 virtual function 還是可能會出問題
10/08 12:29, 3F

10/08 13:55, , 4F
多層繼承為什麼會出問題?
10/08 13:55, 4F

10/08 19:31, , 5F
大家都有看清楚嗎 @@...?
10/08 19:31, 5F

10/08 19:32, , 6F
我覺得原PO的問題不是真的"只要"釋放資源 不然就像我上
10/08 19:32, 6F

10/08 19:33, , 7F
一篇講的一樣,也就是你這篇講的(為何要重複說?)
10/08 19:33, 7F

10/08 19:35, , 8F
話說原PO你要不要放棄太貼心的設計 XD ?
10/08 19:35, 8F

10/08 19:43, , 9F
如果沒要在釋放時做些特別的動作,照YOCO講的就好了呀
10/08 19:43, 9F

10/08 21:35, , 10F
ya...我猜這是個取捨吧。我原本的做法就是把責任推給
10/08 21:35, 10F

10/08 21:36, , 11F
client,只是想知道有沒有更有趣或更髒的方法
10/08 21:36, 11F

10/08 21:37, , 12F
看來不要做太多會活比較久一點
10/08 21:37, 12F

10/08 21:45, , 13F
你看仔細,我根本沒透過虛擬函數釋放資源..
10/08 21:45, 13F

10/08 21:45, , 14F
物件結束時,釋放資源的動作都在取得資源的類別
10/08 21:45, 14F

10/08 21:46, , 15F
的解構子自己來釋放,根本沒有問題..
10/08 21:46, 15F

10/08 21:46, , 16F
你要 base->close() 就盡情的 base->close() 沒問題
10/08 21:46, 16F

10/08 21:46, , 17F
但是 ~base() 的時候不要呼叫 close() 就好了..
10/08 21:46, 17F

10/08 21:48, , 18F
如果執意要實行 template method pattern..
10/08 21:48, 18F

10/08 21:48, , 19F
反而是奇怪的事情,DP 是要用在適合的地方
10/08 21:48, 19F

10/08 21:49, , 20F
不管合不合用硬要用就 over DP... 沒意義...
10/08 21:49, 20F

10/08 22:44, , 21F
其實我認為legnaleurc的貼心,最大的好處是保護自己的程
10/08 22:44, 21F

10/08 22:45, , 22F
式不被設計不良的plug-in影響,這是win-win。XD
10/08 22:45, 22F

10/08 23:06, , 23F
YOCO 我之前的文章就也有提到 也是沒用虛擬機制 :)
10/08 23:06, 23F

10/08 23:07, , 24F
比較有sense的人都知道該那樣做,大家只是針對原PO的
10/08 23:07, 24F

10/08 23:07, , 25F
CASE討論罷了 :)
10/08 23:07, 25F
文章代碼(AID): #1ApMbiLq (C_and_CPP)
文章代碼(AID): #1ApMbiLq (C_and_CPP)