为什么不允许这样做?获取错误"无法从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();
答案 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
个,而不是指针。
请注意,使用StaticPhysicsObject
和malloc
来获取指向C ++中动态数组的指针是 evil 。 static_cast
对构造函数一无所知,所以你只需为类类型的对象获得一些未初始化的内存。 C ++有malloc
,但你只需使用new[]
就可以了。