2012-04-28 3 views
2

오브젝트 1에 부스트 시그널 2 신호가 있고 오브젝트 2에 부스트 시그널 2 신호가 있습니다.
오브젝트 2가 파괴되면 신호가 끊어지지 않고 신호가 끊어지면 신호가 끊어집니다.
이 문제를 해결하기 위해 객체 2에 scoped_connection을 유지합니다. 이제 객체 1이 신호로 소멸되고 객체 2가 소멸되면 문제가 발생합니다.
문제가 발생합니까? 일반적인 문제를 해결할 더 좋은 방법이 있습니까? (오브젝트 1 -> 오브젝트 2와의 연결이있어 오브젝트 2가 소멸 될 때 연결이 끊어집니다). 문제를 보여줍니다부스트 시그널 2 파괴 안전

코드입니다 :

auto sig = new signal<void()>(); 
auto conn = new scoped_connection(sig.connect(&some_function)); 
delete sig; 
delete conn; 

이 안전한가요?

답변

2

체크

http://www.boost.org/doc/libs/1_55_0/doc/html/signals2/tutorial.html#signals2.tutorial.connection-management

특히 부분 하나는 슬롯을 사용함으로써, shared_ptr에 의해 관리되는 모든 객체를 추적 할 수있다 Boost.Signals2와 그러나

":: 트랙 슬롯은 추적 된 객체가 만료 될 때 을 자동으로 연결 해제합니다 .에 추가하면 Boost.Signals2는 추적 된 객체가 만료되지 않도록합니다. 슬롯이있는 동안 중간 실행 중이다. 을 실행하기 전에 슬롯의 추적 된 개체 의 임시 shared_ptr 복사본을 만들어 이렇게 만듭니다. "