내 응용 프로그램 문제는 다음과 같습니다. -부스트 shared_ptr use_count 함수
큰 구조체 foo가 있습니다. 이 값은 크고 메모리 관리상의 이유로 데이터 처리가 완료되면 삭제하지 않으려 고합니다.
우리는 std::vector<boost::shared_ptr<foo>>.
내 질문에 저장되어 모든 처리가 완료되면 알고 관련이있다. 첫 번째 결정은 프로그램에 여러 실행 경로가 있고 어느 것이 마지막인지 예측할 수 없기 때문에 다른 응용 프로그램 코드가 구조에서 완전한 플래그를 표시하는 것을 원하지 않는다는 것입니다.
우리의 구현에서 일단 처리가 완료되면 벡터의 것을 제외한 boost::shared_ptr<foo>>
의 모든 사본을 삭제합니다. 이것은 shared_ptr의 참조 카운터를 1로 떨어 뜨릴 것입니다. shared_ptr.use_count()를 사용하여 앱의 다른 모든 부분이 데이터로 처리되는 시점을 알 수있는 값이 1인지 확인하는 것이 실용적인가요?
내가 질문하는 또 다른 이유 중 하나는 공유 포인터 shared_ptr의 프로덕션 코드에 "use_count"를 사용하지 않는 것이 좋습니다.
편집 - 내가 말하지 않았다 우리가 새로운 foo를 필요로 할 때, 우리가 현재 사용하지 않는 foo를 찾고 foo는 포인터의 벡터를 스캔하고 다음 라운드에 대한 그 foo는 사용하는 것입니다 처리. 이것이 왜 reference counter가 1이라는 것이이 특정 foo 객체가 더 이상 사용되지 않도록하는 안전한 방법이라고 생각했기 때문입니다.
코드가 멀티 스레드입니까? 이 경우 답변이 변경됩니다. – wheaties
예, 3 ~ 6 개의 스레드가 데이터 작업 중 –