替代放置新的不会覆盖放置内存位置

时间:2015-04-23 17:06:10

标签: c++ casting polymorphism

我在虚函数中使用多态,需要在使用之前将指针定义为子对象类型。例如:

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添加到功能 -

1 个答案:

答案 0 :(得分:1)

0x20000处的字节与object_child的数据结构布局相匹配,但实际并非如此。也就是说,您忽略了object_child有一个您无法识别的隐形成员 - 虚拟函数指针。这意味着没有指针强制转换,期间。您必须创建一个实际 object_child对象,并附上该状态的副本。