2010-04-08 55 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