从函数返回后丢失RTTI信息

Chr*_*rdt 4 c++ dynamic-cast visual-studio-2005 rtti

给定一个类和子类:

class Event {...}
class Note : public Event {...}
Run Code Online (Sandbox Code Playgroud)

注释被克隆并存储在函数f()中的指针中.类型信息保留在指针中,可以通过dynamic_cast恢复:

void f()
{
   pEvent = pNote->Clone();    // create a clone of a Note
   ASSERT(dynamic_cast<Note*>(pEvent));   // check the pointer, here it works
}
Run Code Online (Sandbox Code Playgroud)

现在,从f()返回后,类型信息丢失了:

f();
ASSERT(dynamic_cast<Note*>(pEvent));   // -> "Access violation - no RTTI-data"
Run Code Online (Sandbox Code Playgroud)

VS-debugger显示有效的指针值(未更改),但不显示派生类,而不是在f()-scope中.

从函数返回时,如何丢失指针的RTTI信息?

Chr*_*rdt 5

有一个析构函数意外地损坏了指针.删除此错误后,RTTI按预期工作.