我在虚函数中使用多态,需要在使用之前将指针定义为子对象类型。例如:
struct object {
virtual void function() {}
};
struct object_child : object {
int a;
int b;
void function() {std::cout<<"working";}
};
int main() {
uint64_t sandbox[512];
object * o1 = new ((void *) &sandbox[0]) object_child();
o1->function();
}
除了覆盖该位置的内存外,此方法正常。是否有一个演员或一些我可以使用的操作符会导致相同的o1而不会覆盖内存位置?
***编辑 - SK - 将cout添加到功能 -
答案 0 :(得分:1)
您说 0x20000
处的字节与object_child
的数据结构布局相匹配,但实际并非如此。也就是说,您忽略了object_child
有一个您无法识别的隐形成员 - 虚拟函数指针。这意味着没有指针强制转换,期间。您必须创建一个实际 object_child
对象,并附上该状态的副本。