所以, 我有一些看起来像这样的代码:
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,而不使用临时原始数组?
我可能会编写一个就地“重置器”类,只是想知道功能是否存在而且我错过了它。
谢谢, 丹
答案 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();