2013-05-11 5 views
3

C에서이 작업을 수행하는 것 외에도 (지금은 되돌리기에 너무 늦음) 필자는 C에 대한 참조 계산을 지원하는 몇 가지 구조체 및 함수를 작성했습니다. 본질적으로 C++ 스타일 Smart 포인터. 내 큰 문제는 그래, 내가 그래프 (정점과 가장자리와 종류) 및 그래프에서, 내 스마트 포인터가 사용되는 이들을 사용하고 있습니다. 따라서 노드를 다른 노드에 연결된 가장자리에 연결했지만 더 이상 포인터가 없으면 서로 포인터를 유지합니다. 따라서 포인터 계산은 0에 도달하지 않으며 결코 자동으로 해제되지 않습니다. 포인터를 모두 계산하지 않고이 문제를 해결할 수있는 방법이 있습니까?참조 루프가있는 C의 스마트 포인터

+0

이것은 가비지 수집가에게 heebie-jeebies를 제공하는 일종의 것입니다. 또는 적어도, 그들이 신중하게 다루어야 만하는 종류입니다. 그리고 당신의 문제는 쓰레기 수거와는 분명히 다르지 않지만 관련이 있습니다. –

+0

아니, 그건 내 문제 야. 메모리 관리와 함께 C로 컴파일되는 프로그래밍 언어를 작성하려고합니다. – jrbalsano

+0

이 문제가 해결 되었습니까? 비슷한 문제가 있습니다. : http://stackoverflow.com/questions/19142499/how-to-efficiently-reference-count-cons-cells-detecting-cycles – paulotorrens

답변

0

boost :: weak_ptr이 shared_ptr의주기를 중단시키는 방법을 알아야합니다.

+0

이 문제가 해결되지 않았는지 확실하지 않습니다. 내 문제는 당신이 노드 a, b, c를 가지고 있다고 가정하고 스택 참조를 상상해 보자. 서로 s-> a-> b-> c, 그리고 s-> b를 가리키고 c-> 만약 우리가에서 s를 제거한다면, s가 여전히 b를 통해 그것을 가리키고 있는지를 결정할 수있는 검증 가능한 방법이 있는가? (BFS가 없는가?) 또한, b로부터 s를 제거한다면, b가 어떻게 삭제되어야 하는지를 어떻게 알 수 있을까? 그리고 a 나 c도 어느 쪽도 가리키고 있지 않습니까? – jrbalsano

+0

@Redian'weak_ptr'가 문제를 해결할 수 있다고 들었습니다'weak_ptr'은'sha red_ptr'하지만'weak_ptr.lock()'을 호출 할 때까지 내용에 접근 할 수 없습니다. 'shared_ptr'이 여전히 유효하다면 그것은 참조 카운트를 증가시킬 것입니다. 그렇지 않으면'null'이 반환됩니다. 메인'shared_ptr'는'weak_ptrs'에 의해 영향을받지 않으며, 그것에 대한 구체적인 참조가 없을 때 정리 될 수 있습니다. – Steve