connect
기능은 기본적으로 대해 정의 operator()
있다 아무것도 주변의 일반적인 래퍼 인 boost::function
개체를합니다. 그러므로 그것은 당신이 구속력을 갖는 것만 큼 안전합니다.
는 예를 들어,이 비교적 안전하다 :이 데이터의 일부로서 저장 boost::shared_ptr
때문에
는
boost::shared_ptr<ClassName> pValue = boost::make_shared<ClassName>(...);
signal.connect(boost::bind(&ClassName::FuncName, pValue, ...);
이 비교적 안전하다.
ClassName *pValue = new ClassName(...);
signal.connect(boost::bind(&ClassName::FuncName, pValue, ...);
이 조건부 안전합니다. 연결이 여전히 존재하고 delete pValue
을 실행하면 즉시 안전하지 않게됩니다.
저는 개인적으로 "조건부 안전"에 대한 믿음을 많이 가지지 않지만 그게 당신에게 달렸습니다. 당신이 바인딩하는 모든 것이 boost::bind
에 바인딩되어있는 한 계속 존재해야한다는 것입니다.