Re: 若在 function 動態配置又要傳回去 那該在哪還?
※ 引述《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
討論串 (同標題文章)
完整討論串 (本文為第 3 之 3 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章