2013-08-20 3 views
0

내 데이터가 많은 항목에 의해 공유되는 shared_ptr을 사용할 때 공유를 표시하기 위해 데이터를 읽고 쓸 수있는 좋은 방법이 있습니까? 예를shared_ptr을 읽고 쓰는 방법은 무엇입니까?

를 들어 내가 데이터 구조를 가지고

struct Data 
{ 
    int a; 
    int b; 
}; 

Data data; 
data.a = 2; 
data.b = 2; 

내가 data.txt

2 2 

같은 파일에 그것을 작성하고 파일을 읽을 수있는, 내가 얻을 수있는 값 a = 2datab = 2. 그러나 데이터가 share_ptr을 사용하면 어려워집니다. 예를 들어,

struct Data 
{ 
    shared_ptr<int> a; 
    shared_ptr<int> b; 
}; 

Data data; 

데이터

data.a.reset(new int(2)); 
data.b = data.a; 

또는

data.a.reset(new int(2)); 
data.b.reset(new int(2)); 

2- 케이스 상이 할 수있다. data.txt 파일에 데이터를 쓰고 데이터를 읽는 방법은 동일한 데이터를 ab의 동일한 관계로 가져올 수 있습니까?

+0

... "공유를 표시하기 위해 데이터를 읽고 쓰는 것"은 무엇을 의미합니까? 너 여기서 뭘하려고하는거야? –

+4

당신은 얼마나 많은'shared_ptr'이 ['use_count()'회원 (http://en.cppreference.com/w/cpp/memory/shared_ptr/use_count)과 같은 자원을 공유하고 있는지 알 수 있습니다. – Casey

+0

@MarkGarcia 더 명확하게하기 위해 제 질문을 편집합니다. 감사. – user1899020

답변

1

이것은 일종의 데이터 직렬화 문제입니다. 여기서 포인터 유형을 가진 Data을 직렬화하려고합니다. 포인터 값을 직렬화하면 포인터가 가리키는 데이터가 어딘가에 쓰여지고 포인터는 데이터가있는 파일의 오프셋으로 변환됩니다. 귀하의 경우에는

, 당신은 바로 객체 후에 기록되는대로 int 값 생각할 수 있고, "포인터"값은 객체 후 바이트의 숫자로 표시됩니다.

|total-bytes-of-data| 
|offset-a| 
|offset-b| 
|value[]| 

같은 인스턴스를 가리킨 a 경우와 b, 그들은 같은 오프셋 것 : 그래서, 당신의 파일의 각 Data처럼 볼 수 있었다. ab이 다른 인스턴스를 가리키면 서로 다른 오프셋을 갖게됩니다.

서로 다른 Data 인스턴스간에 발생하는 공유를 감지하고 처리하는 문제는 연습 문제로 남겨 둘 것입니다.

관련 문제