在运行时动态更改虚拟指针

sla*_*ast 4 c++ vptr

假设我有两个类继承具有纯虚函数的基类。这两个类都实现了该函数的自己的版本,但是不添加其他成员变量,因此它们具有相同的大小。现在有时候,在程序执行的中间,我想将一个类转换为另一个类,而不复制其所有数据。所以基本上我想让它使用其他类的虚拟表。有便携式的方法吗?

Man*_*rse 5

可移植的方法是实现自己的类系统,该类系统实际上具有可以复制的虚拟指针。

在标准C ++中,没有虚拟指针这样的东西。


Che*_*Alf 5

挪威安德森咨询公司(现为埃森哲)的一位年轻同事曾经向我提出一个严重的问题。他们的应用程序是用 Visual Basic 开发的,需要很长时间才能加载。他怀疑这可能是因为他们把每个类都放在了自己的DLL中?

由于担心出现最坏的情况,我进一步询问。是的,他们也遇到了任意崩溃等问题。

他怀疑其他莫名其妙的崩溃可能与他们在运行时通过替换 vtable 指针来更改对象类型的巧妙方案有关?

我建议也许他们不应该真的做这些事情。他怀疑地看着我,并大胆地说他们没有时间再从头开始做事情。事实上,他们已经在扩展它,并且存在各种问题,例如他们的项目负责人坚持要求他们在客户现场工作而不是参加强制性会议。对我来说,这听起来就像蘑菇管理(将它们放在黑暗中,当头弹出时,将其切掉):这些事情通常是相辅相成的。

无论如何,我给你同样的建议:不要。

也许您可以实施快速移动操作将数据从a移动到b

或者,也许你会发现这都是过早优化的情况?