0

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

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,而不使用临时原始数组?

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

谢谢,丹

4

1 回答 1

0

为什么不能只将作用域数组的引用传递给 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();
于 2010-04-10T23:18:11.213 回答