在面向对象的程序设计,它有时很高兴能够修改一个已经创建的对象的行为。当然,这可以通过比较详细的技术来完成,例如战略模式。然而,有时候通过在实例化之后改变vtable指针来完全改变对象的类型将会很好。这将是在确保安全的,假设你从类A切换到B类:为什么不可热插拔的vtables成为热门语言功能?
- B类是A类的子类,不添加任何新的领域,或
- B类和A类有相同的父类。除了覆盖父类的虚拟函数之外,其他都不做任何事情。 (无新字段或虚函数。)
- 在任一情况下,A和B必须具有相同的不变量。
这在C++和D编程语言中是可以破解的,因为指针可以被任意地强制转换,但它太难看了,难以遵循,所以我很害怕在代码中这样做,它需要被理解还有谁。为什么不是通常提供的更高级的方法?
确切地说,什么能力使库设计者能够在不调用构造函数的情况下创建对象? – fredoverflow 2012-08-12 12:01:04
@FredOverflow在Java附带的一些sun库中查找'Unsafe.allocateInstance()'。它用于反序列化对象。 – akuhn 2012-09-17 22:19:43