Re: 若在 function 動態配置又要傳回去 那該在哪還?

看板C_and_CPP作者 (cppOrz)時間18年前 (2006/04/03 00:30), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《sunkill (linux才是王道)》之銘言: : 再確認一下 : 看完上面的文章 : 那所以用 fun 做動態配置傳回來給 main 的指標 : 是不是一定還要在主程式 delete 掉? : 有沒有別的做法? : 謝謝 最簡單的改法是一律由外部(main)配置: void foo(T *p) { ... } int main() { T *p = new T; foo(p);  ... // do something with p delete p; } 如果嫌這樣麻煩,可考慮用 auto_ptr(或 boost::shared_ptr 也可): typedef std::auto_ptr<T> PT; PT foo() { PT p(new T); ... return p; } int main() { PT p = foo(); ... // do something with p } 這個寫法的好處是 foo 的用戶只要寫一行,不用自己分配內存,也不用操心何時 delete 的問題。在傳遞大型物件時,這是一個可考慮的方案。 auto_ptr 的缺點是不能針對陣列,若要在模組間傳遞動態配置的陣列,可以考慮用 std::vector 或 boost::shared_array。後者的優點在於,它像 auto_ptr 一樣, 可以直接以 return 的方式返回,用戶使用比較方便。但 return 一個 vector 物件 的成本通常比較大,所以用 vector 時一般都是透過參數列,以 by reference 的 方式傳遞。 純 C 的話,就只有 return malloc 出來的內存,再由外部 free,或是全部由 外部負責管理,這兩種方法。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.214.120
文章代碼(AID): #14B_miY1 (C_and_CPP)
文章代碼(AID): #14B_miY1 (C_and_CPP)