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

看板C_and_CPP (C/C++)作者 (我要加入劍道社!)時間16年前 (2009/10/08 10:17), 編輯推噓0(006)
留言6則, 2人參與, 最新討論串12/13 (看更多)
話說我想到另一個方法 因為並非所有的 C++ 物件都適合用 delete 來回收, 因此 shared_ptr 提供了一個彈性, 讓使用者可以修改物件回收的行為。 既然如此,我們可以從這邊下手, 讓 shared_ptr 自動幫我們呼叫 close() void base_deleter(Base* p) { p->close(); // 這時候物件尚未被解構,多型呼叫是 OK 的! delete p; } void foo() { // ... shared_ptr<Base> p(new Derived(...), base_deleter); // ... } 這麼一來其它地方都不用改了 p 在解構時會呼叫 base_deleter 而非直接用 delete 當然 base_deleter 不一定非要函式指標不可 也可以是 functor 之類的東西 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.29.108

10/08 10:44, , 1F
推,我本來也想說如果可以傳自定的清理函式不就解決了
10/08 10:44, 1F

10/08 10:44, , 2F
原來真的有 =.=!!
10/08 10:44, 2F

10/08 12:21, , 3F
我有考慮過這個做法,不過這等於是又要在文件上註明
10/08 12:21, 3F

10/08 12:21, , 4F
你擴充 Factory 時要記得用這 deleter ...
10/08 12:21, 4F

10/08 12:22, , 5F
不然可能要考慮用 bind deleter 的方式給他們註冊 ...
10/08 12:22, 5F

10/08 12:23, , 6F
... 我好像越搞越複雜 orz
10/08 12:23, 6F
文章代碼(AID): #1ApKkZ0- (C_and_CPP)
文章代碼(AID): #1ApKkZ0- (C_and_CPP)