2010-03-12 3 views
0

두 개 이상의 다른 객체가 공유하는 객체를 관리하는 것이 가장 좋습니다. 다른 스레드에서 실행 중일 때도?C++ 공유 객체의 핸들 관리 문제

예를 들어 A가 생성되고 B와 C에 대한 포인터가 지정됩니다. ObjA A = new ObjA(); B-> GiveObj (A); C-> GiveObj (A);

이제 어떻게 objA를 삭제할 수 있습니까?

지금까지 나는 얼마나 많은 레퍼런스가 있는지 모니터하고있다.이 카운터가 0 일 때 A가 지나면 수신자가 A-> Aquire()를 호출 할 때와 같이 완료된다.

또는 B-> RemoveObj (A)와 C-> RemoveObj (A)를 말할 수 있는데, 그 문제는 B 또는 C가 다른 스레드에서 실행 중인지, 그들은이 함께 할 때까지 나는 삭제할 수 없습니다, 그들은 RemoveObj 전화를 보았다. (지저분한 플래그의 무리를 필요로합니다).

이 가능한 신호/슬롯으로,이 작업을 수행 할 수있는 좋은 방법이 있을까요?

감사합니다

답변

2

가장 좋은 방법은 Boost's shared_ptr과 같은 스마트 포인터 구현을 사용하는 것입니다.

이렇게하면 삭제 걱정없이 필요에 따라 포인터를 전달할 수 있습니다.


편집 :

난 그냥 당신이 신호/슬롯 태그를 추가했다 깨달았다. 우연히 Qt를 사용하고 있다면 부스트 포인터 구현 대신에 QSharedPointer (또는 유사)을 원할 수도 있습니다.