2012-08-16 4 views
0

나는 API 배열에서 동적 배열에 대한 포인터를받는 컨테이너 클래스를 가지고 있습니다. 이 클래스는 버퍼의 소유자가되며 delete []를 사용하여 삭제해야합니다. ;동적 배열을 통한 소유권 공유

값 * PTR = malloc에 ​​(10 *를 sizeof (값)) 다음과 같이

그래서 버퍼가 생성되었을 수도

또한 ValueWrapper라는 클래스가 하나의 Value에서 작동합니다. 내 용기가 파괴되면

ValueWrapper Container::valueWrapper(int index) 
{ 
    return ValueWrapper(_value[index]); 
} 

그러나, 유형 VWrapper의 객체가 * 유효하지 않은 값을가집니다 :

내 컨테이너는 다음과 같이 ValueWrapper 개체, 뭔가를 반환 게터 있습니다.

어떻게이 문제를 해결할 수 있습니까? Value *의 소유권을 어떤 방식 으로든 공유해야합니다. ValueWrapper 객체가 Container가 범위 내에 있고 Container :: valueWrapper (int index)에 대한 주석에이 속성을 쓸 때만 사용할 수 있다고 주장하는 것이 합리적입니까?

답변

5

공유 소유권을 원할 경우 배열을 std::shared_ptr의 배열로 압축을 풀고 삭제를 제거 할 수 있습니다. C++ 11 지원이 없다면 boost::shared_ptr 또는 std::tr1::shared_ptr을 사용할 수 있습니다.

+1

더 간단한 사용을 위해, 오른쪽 deallocator가있는'std :: shared_ptr '은 배열 전체를 관리 할 수 ​​있습니다. – thiton

+0

@juanchopanza 그렇다면 버퍼 내의 각 위치에서 Value *로 초기화 된 std :: vector 및 push_back std :: shared_ptr 객체를 만듭니다. – Baz

+0

@Baz는 그것을 수행하는 한 가지 방법이지만 push_back을 수행 할 필요는 없습니다. 벡터의 두 iterator 생성자를 사용할 수 있습니다. – juanchopanza