给定一个类和子类:
class Event {...}
class Note : public Event {...}
注释被克隆并存储在函数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
}
现在,从f()返回后,类型信息丢失了:
f();
ASSERT(dynamic_cast<Note*>(pEvent)); // -> "Access violation - no RTTI-data"
VS-debugger显示有效的指针值(未更改),但不显示派生类,
而不是在f()
- 范围内。
从函数返回时,如何丢失指针的RTTI信息?
答案 0 :(得分:5)
有一个析构函数意外地对指针造成了伤害。删除此错误后,RTTI按预期工作。