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

时间:2015-08-18 10:55:37

标签: c++ arrays pointers

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

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();

2 个答案:

答案 0 :(得分:3)

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

然而,

new StaticPhysicsObject();会产生一个StaticPhysicsObject*指针。但是,您无法将指向该对象的指针指定给普通对象。

答案 1 :(得分:2)

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

分配大小为StaticPhysicsObject的{​​{1}}数组。

shapes.size()

shape[0] = new StaticPhysicsObject(); 返回指向new StaticPhysicsObject() a StaticPhysicsObject的指针。 StaticPhysicsObject拥有shape个,而不是指针。

请注意,使用StaticPhysicsObjectmalloc来获取指向C ++中动态数组的指针是 evil static_cast对构造函数一无所知,所以你只需为类类型的对象获得一些未初始化的内存。 C ++有malloc,但你只需使用new[]就可以了。