从函数返回后丢失 RTTI 信息

发布于 2024-12-02 05:26:02 字数 583 浏览 3 评论 0原文

给定一个类和子类:

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() 范围内时之外。

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

Given a class and subclass:

class Event {...}
class Note : public Event {...}

A Note is Cloned and stored in a pointer within a function f(). The type-information is preserved in the pointer and can be recovered by dynamic_cast:

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

Now, after returning from f() the type-information is lost:

f();
ASSERT(dynamic_cast<Note*>(pEvent));   // -> "Access violation - no RTTI-data"

The VS-debugger shows a valid pointer-value (unchanged), but not the derived class,
other than while beeing in the f()-scope.

How can the RTTI-info for a pointer be lost when returning from a function?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乙白 2024-12-09 05:26:02

有一个析构函数不小心损坏了指针。消除此错误后,RTTI 将按预期工作。

There was a destructor accidently doing harm to the pointer. After removing this error, the RTTI works as expected.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文