2010-04-08 2 views
0

그래서, 나는 다음과 같다 몇 가지 코드가 있습니다포장 할당 된 출력 매개 변수

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

질문 :

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

내가이 포인터를 컨테이너를 사용,이 안전하게 만들려면을 임시 원시 어레이를 사용하지 않고 scoped_array를 사용하여이를 수행하는 기존의 방법이 있습니까?

아마도 "기능이 있는지 궁금해하고 적절한 기능이 없는지 궁금해 할 것입니다.

감사합니다, 댄

답변

0

은 왜 그냥 foo는 foo 함수의 내부에서 다시 호출 할 수있는 범위의 배열에 대한 참조를 전달할 수 없습니다?

은 또한 푸 후원을 :: 돌아왔다하는 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는 변경할 수 없습니다를?

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

을 다음과 같이

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

또는 당신 foo는 과부하 수 foo는이 주어

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

을 다음과 같이 오버로드 된 버전을 사용하고, 나는 그것을 변경하지 않습니다. 나는 foo를 호출하는 범위에서 안전을 시행하고 싶다. – Danra

+0

과부하 제안을 좋아합니다. 더 많은 캡슐화를 제공합니다. 감사! – Danra