您可以告诉C 中的运行时函数是否为纯虚拟

Can you tell if a function is pure virtual at runtime in c++

本文关键字:函数 运行时 是否 虚拟      更新时间:2023-10-16

我有一个非常零星的错误,在运行时,虚拟函数看起来已成为"纯"。它必须是一些记忆损坏,显然该对象尚未被破坏,但可能已被覆盖在某个地方。

调试器将虚拟函数中的一个指针之一显示为null。

问题是,您可以在运行时告诉函数是否== null?

&(object->function)==NULL

正在给出编译错误"对绑定成员函数表达式的非法操作"

编辑:有了那个句子,我想做的就是在崩溃点之前的运行时进行一些检查,以查看我是否可以拦截情况(功能地址为0x00000000)。显示代码的时间可能会有点长,因为具有有问题功能的对象可能已经大约在一段时间内完成了许多过程,因此我不希望解决实际问题的解决方案。我只是想知道我是否可以进行一些测试以尽早检测腐败(虫子是偶然的)

呼叫纯虚拟函数,如果您在派生类(实现虚拟函数的一个)或破坏后调用虚拟函数(实现虚拟函数的一个)。正式地,这也会导致不确定的行为。您也许可以在混凝土派生的类'ctor中添加一个标志并在DTOR中重置,然后检查该标志,这是一个丑陋的黑客。您也可以使用typeid检查类型,但是该方法更复杂,因此更有可能引起其他问题。

一个建议:您应该系统地确保将来不会发生此类问题。有时,一个保证正确代码的小弯路值得!