2011-09-21 2 views
2

텍스처에 대한 포인터를 저장하기 위해 boost :: shared_ptr을 사용하고 있습니다. 필요에 따라 새로운 텍스처를로드하고 shared_ptr을 사용하여 프로그램간에 공유합니다. 내 응용 프로그램이 너무 많은 메모리를 사용하는 경우 사용하지 않는 텍스처를 제거하여 메모리를 지우고 싶습니다. 얼마나 많은 객체가 shared_ptr을 통해 텍스처에 접근 할 수 있는지를 결정할 수있는 방법이 있습니까?boost shared_ptr 소유자 수 얻기

답변

6

사용하지 않는 경우 shared_ptr은 자동으로 해제합니다. 그것이 shared_ptr의 요점입니다. 실제 사용하지 않고 텍스처에 shared_ptr을 잡고 있다면 shared_ptr 계약을 위반하고있어 사용해서는 안됩니다.

+0

모든 텍스처는 shared_ptr을 통해 ResourceManager에 보관됩니다. 그리고 프로그램의 다른 부분은이 관리자를 통해 텍스처에 액세스 할 수 있습니다. 나는 메모리 경고를받을 때까지 텍스처를 제거하고 싶지 않습니다. 이 경우 사용하지 않는 텍스처 (자원 관리자 만 보유)를 제거하고 싶습니다. – Andrew

+0

@Andrew : boost.weak_ptr 또는 boost.intrusive_ptr을 보셨습니까? – PlasmaHH

+1

@Andrew : ResourceManager를 삭제하고 'shared_ptr'을 처리하는 것이 더 쉬울 것입니다. – Puppy

1

이 있지만 문서에 나와 있듯이 너무 효율적이라고 할 수는 없습니다.

1

클래스에는 멤버 함수 use_count()unique()이있어 사용 횟수에 액세스 할 수 있습니다.

정보가 당신에게 어떻게 유용한 지 다른 질문입니다.

관련 문제