나는 클래스 bar
의 방법 중 하나에 멤버 함수 포인터를 받아 클래스 foo
을 가지고 있지만 foo
이 펑터 이전 bar
의 존재를 확인 할 수있는 방법이보다 클래스 바는 짧은 수명을 가질 수있다 실행 중입니까?검증 펑터의 대상 개체
현재 std::function
의 bool operator
을 사용하려고합니다.
class Foo
{
public:
void Foo::SetCallback(std::function< void(void) > cb)
{
_cb = cb; // My Bar class will call this to assign a Bar member function pointer to Foo's _cb member variable
}
void Foo::CallCallback()
{
if(_cb) _cb(); // This evaluates to true even if the original bar object has been destroyed
//I want this callback to only execute if the bar object exists
}
private:
std::function< void(void) > _cb;
};
class Bar
{
public:
Bar(Foo* _foo)
{
_foo->SetCallback(std::bind(&myCalledbackFunc, this);
}
void myCalledbackFunc()
{
//do stuff
}
};
죄송합니다. 귀하의 질문에 완전히 불명확합니다. 'bar'는 정확히 무엇입니까? 실제로 발생하는 동작과 오류를 재현하는 [최소 샘플] (http://stackoverflow.com/help/mcve)을 입력하십시오. –
function 매개 변수로 functor 외에도 bar 인스턴스의 weak_ptr을 갖는 것은 어떻습니까? – Silvester
@SilvesterSeredi는 좋은 생각처럼 들리지만 ... 저는'std :: weak_ptr'에 익숙하지 않습니다. 단순히'bar' ctor에서'this'에서 만들 수 있습니까? –