, 하나는 내가 다음 테스트 코드에서 두 클래스를 넣어이상한 행동 내가이 개 수업을
class OKClass
{
public:
void PrintTest() {
std::cout << "print from OK class " << std::endl;
}
};
class CrashClass
{
public:
virtual void PrintTest() {
std::cout << "print from virtual Crash class " << std::endl;
}
};
가상 기능이 CrashClass는 ) (때 호출 FUNC 충돌 OkClass는 "OK 클래스에서 인쇄"라는 단어를 인쇄합니다. 왜냐하면 shared_ptr 테스트는 범위를 벗어 났을 때 릴리스되었습니다. 왜이 이상한 일이 일어 났는지 나에게 설명 할 수 있니?
정보의 부족에 대한boost::function0<void> func;
{
boost::shared_ptr<CrashClass> test(new CrashClass);
func = boost::bind(&CrashClass::PrintTest, boost::bind(&CrashClass::wptr::lock, CrashClass::wptr(test)));
}
func();
SRY 감사합니다 내가 왜 일류 작품 이유를 알고 있고, 두 번째는
추락하고 내가 가진typedef boost::weaked_ptr<CrashClass> wptr
Functor를 사용하여이 문제를 해결하십시오.
감사합니다. 어쨌든
당신은 당신보다 많은 코드를 붙여 넣어야합니다. 'wptr'은 무엇입니까? –
Chris Jester-Young이 지적한대로 코드가 누락되어 wptr 항목이 무엇인지 알 수 없습니다. 그러나 PrintTest의 첫 번째 인수에 함수 객체를 바인딩하고 있지만 PrintTest는 멤버 메서드이며 첫 번째 인수는 클래스의 인스턴스에 바인딩되어야한다고 말할 수 있습니다. wptr :: lock이 인스턴스를 반환하는 함수 인 경우이 작업을 수행하려면 더 많은 작업이 필요하지만 그 시점에서 추측하고 실제로 대답이 아닙니다. – ex0du5
등록되지 않은 계정을 병합했습니다. 이제 질문을 다시 편집하고받은 답변 아래에 의견을 남길 수 있습니다. –