5

给定一个类和子类:

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 调试器显示一个有效的指针值(未更改),但不是派生类,除了在f()-scope 中运行时。

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

4

1 回答 1

7

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

于 2011-08-30T10:52:27.393 回答