作者cppOrz (cppOrz)
看板C_and_CPP
标题Re: 若在 function 动态配置又要传回去 那该在哪还?
时间Mon Apr 3 01:06:35 2006
※ 引述《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