看板 C_and_CPP 關於我們 聯絡資訊
話說我想到另一個方法 因為並非所有的 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