2010-04-08 41 views
0

所以, 我有一些代码,看起来像这样:包装分配的输出参数与scoped_ptr的/阵列

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

为什么你不能只传递一个参考范围的数组foo和调用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); 

或者你可以按如下

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

超载FOO,然后使用重载版本如下

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

富给出了,我不想改变它。我想强调从调用foo的范围开始的安全性。 – Danra 2010-04-11 08:29:16

+0

我喜欢超载的建议,它提供了更多的封装。谢谢! – Danra 2011-09-27 18:33:03