作者littleshan (我要加入劍道社!)
看板C_and_CPP
標題Re: [問題] 多型的自動回收
時間Thu Oct 8 10:17:04 2009
話說我想到另一個方法
因為並非所有的 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
→ cplusplus:推,我本來也想說如果可以傳自定的清理函式不就解決了 10/08 10:44
→ cplusplus:原來真的有 =.=!! 10/08 10:44
→ legnaleurc:我有考慮過這個做法,不過這等於是又要在文件上註明 10/08 12:21
→ legnaleurc:你擴充 Factory 時要記得用這 deleter ... 10/08 12:21
→ legnaleurc:不然可能要考慮用 bind deleter 的方式給他們註冊 ... 10/08 12:22
→ legnaleurc:... 我好像越搞越複雜 orz 10/08 12:23