2013-01-05 2 views
1

할당 된 구조체 '객체'에 대한 참조 계산의 기초는 내게는 매우 직설적 인 것처럼 보입니다. 새 객체에 1의 RC를 지정합니다. 할당시 이전 객체의 RC를 감소시키고 (RC = 0이면 해제) 할당 된 객체의 RC를 증가시킵니다. 범위를 벗어나는 모든 객체의 RC를 감소시킵니다.C- 파라미터 전달에서 참조 계산을하는 방법

그러나 RC'ed 개체가 전달되거나 함수에서 반환 될 때 수행해야 할 작업에 대해 조금 혼란 스럽습니다. 나는 각각의 함수 호출 전후에 RC를 inc/dec해야하고 필요하다면 inc와 dec을 어디에 넣어야합니까? (처음에는 함수 내에서 & 끝이나 & 앞에)? 함수에 의해 반환 된 RC'ed 객체는 어떻습니까?

답변

2

일반적으로 새로운 참조가 생성 될 때마다 증가하고, 삭제되거나 폐기 될 때마다 감소합니다.

함수 인수에는 복사본이 필요하므로 증가분입니다. 함수 반환 값은 복사가 필요하므로 증가 값입니다. 물론 많은 경우에 해당하는 동시에 삭제 될 수 있으므로 카운트를 수정하지 않아도 최적화 할 수 있습니다.

물론 C에서는 모든 것을 수동으로해야하기 때문에 매우 복잡하고 오류가 발생하기 쉽습니다. 부서 지거나 신뢰할 수없는 참조 횟수 메커니즘은 논란의 여지없이 전혀 없습니다.

3

참조 횟수를 늘리는 것은 "내가 가리키는 부분에 관심이있어서 포인터를 어딘가에 저장했습니다. 찾고있는 동안 포인터를 저장하지 마십시오."라고 말합니다.

포인터를 저장할 때마다 '참조'이므로 계산해야합니다.

함수가 포인터를 어딘가에 저장하지 않으면 포인터를 증가시킬 필요가 없습니다. 포인터를 저장 한 후 참조 카운트를 줄이면 \

참조 횟수가 이미 1로 설정된 '개체'가 반환됩니다. 당신에게 참조의 '소유권'이 있는지 여부를 알 수있는 함수 문서 (이 경우 카운트를 감소시켜야 함) 또는 호출해야하는 다른 함수가 있으면이를 감소시키고 해당 포인터에 대한 참조를 제거합니다 다른 객체 내부.

0

기능이 동일하다고 생각합니다.
함수 호출에 대한 포인터를 전달한 경우 할당으로 처리하지 않는 이유는 무엇입니까? (그래서 RC가 증가해야한다고 생각합니다)
함수를 떠날 때 범위를 벗어나는 것과 같다고 생각합니다.
반환 값에 대해 할당에 사용 된 경우, 말한대로 RC + 1 또는 RC를 변경할 필요가 없습니다.