实例化这些数组时有什么区别

Whats the difference when instantiating these arrays

本文关键字:什么 区别 数组 实例化      更新时间:2023-10-16

为什么不允许这样做?获取错误"无法从StaticPhysicsObject*转换为StaticPhysics Object">

StaticPhysicsObject* shape = static_cast<StaticPhysicsObject*>(malloc(sizeof(StaticPhysicsObject*)* shapes.size()));
shape[0] = new StaticPhysicsObject();

但这是有效的。

StaticPhysicsObject* shape[100];
shape[0] = new StaticPhysicsObject();

我知道这是一个指向充满指针的数组的指针。我只是不明白为什么第一个样本没有给出与这个样本相同的结果。

StaticPhysicsObject** shape = static_cast<StaticPhysicsObject**>(malloc(sizeof(StaticPhysicsObject*)* shapes.size()));
shape[0] = new StaticPhysicsObject();

StaticPhysicsObject* shape = new StaticPhysicsObject();中,定义指向StaticPhysicsObject对象的指针。通过shape[0]访问此指针相当于*(shape + 0),与*shape相同。此表达式的类型为StaticPhysicsObject,即不是指针。

然而CCD_ 7产生CCD_。但是,不能将指向对象的指针分配给普通对象。

StaticPhysicsObject* shape = 
  static_cast<StaticPhysicsObject*>(malloc(sizeof(StaticPhysicsObject*)* shapes.size()));

其分配大小为shapes.size()StaticPhysicsObjects的阵列。

shape[0] = new StaticPhysicsObject();

new StaticPhysicsObject()返回指向StaticPhysicsObject的指针,而不是指向StaticPhysicsObjectshape保存StaticPhysicsObject s,而不是指针。

注意,在C++中使用mallocstatic_cast来获取指向动态数组的指针是evilmalloc对构造函数一无所知,所以您只会为类类型的对象获得一些未初始化的内存。C++有new[],但您最好只使用std::vector