使用scoped_ptr / array包装已分配的输出参数

时间:2010-04-08 08:38:23

标签: boost memory-management output-parameter

所以, 我有一些看起来像这样的代码:

byte* ar;
foo(ar) // Allocates a new[] byte array for ar 
...
delete[] ar;

为了使这更安全,我使用了scoped_array:

byte* arRaw;
scoped_array<byte> ar;
foo(arRaw);
ar.reset(arRaw);
...
// No delete[]

问题是,是否有任何现有方法只使用scoped_array,而不使用临时原始数组?

我可能会编写一个就地“重置器”类,只是想知道功能是否存在而且我错过了它。

谢谢, 丹

1 个答案:

答案 0 :(得分:0)

为什么你不能只将对scoped数组的引用传递给foo并在foo中调用reset?

或者让foo返回boost :: shared_array / ptr,如下所示

boost::shared_array<byte> foo()
{
  boost::shared_array<byte> a (new byte[100]);
  return a;
}

boost::shared_array<byte> ar = foo();

编辑:

既然你不能改变foo怎么样?

byte* rawArray;
foo (rawArray);
boost::scoped_array<byte> array (rawArray);

或者你可以按如下方式重载foo

boost::shared_array<byte> foo()
{
    byte* rawArray;
    foo (rawArray);
    return boost::shared_arry<byte> (rawArray);
}

然后使用重载版本如下

boost::shared_array<byte> array = foo();