Visual Studio를 사용하고 있으며 유효한 동적 캐스팅을 수행하고 있습니다. RTTI가 활성화됩니다.std :: __ non_rtti_object 예외가 생성되는 이유는 무엇입니까?
편집 :
struct base
{
virtual base* Clone()
{
base* ptr = new base;
CopyValuesTo(ptr);
return ptr;
}
virtual void CopyValuesTo(base* ptr)
{
...
}
virtual ~base()
{
}
}
struct derived : public base
{
virtual base* Clone()
{
derived* ptr = new derived;
CopyValuesTo(ptr);
return ptr;
}
virtual void CopyValuesTo(base* ptr)
{
...
}
virtual ~derived()
{
}
}
void Class1::UseNewSpec(base* in_ptr) //part of a totally unrelated class
{
derived* ptr = dynamic_cast<derived *>(in_ptr);
if(!ptr)
return;
delete m_ptr;
m_ptr = ptr->Clone(); //m_ptr is a member of Class1 of type base*
}
//usage :
Class1 obj;
derived new_spec;
obj.UseNewSpec(&new_spec);
내 디버거가 예외가 발생하는 경우 올바른 유형의 in_ptr 것을 말한다 더 현실적으로 코드를 업데이트했습니다. 구글은 특히 도움이되지 않는 것 같다. 어떤 아이디어? 건배.
실제 코드를 게시하십시오. – dirkgently
다음은 사용 시나리오입니다. UseNewSpec은 GUI 노브에 연결됩니다. 노브가 변경되면 UseNewSpec이 호출됩니다. 그것은 노브가 천천히 움직일 때 작동합니다, 그러나 정말로 빨리 움직일 때 이것을 제외하고 이것을 나타냅니다. – Carl
감사합니다.나는 그것을 알아 냈다. 스레딩 문제였습니다. 일부 다른 코드는 dynamc 캐스트 바로 전에 포인터가 유효하지 않게되는 원인이되었습니다. – Carl