最近很累,写了如下代码:
GLfloat* array = new GLfloat(x * y * z);
当然应该是:
GLfloat* array = new GLfloat[x * y * z];
(注意方括号而不是圆括号。)
据我所知,第一种形式无效,但 g++ 编译了它。当然,它吐出了一个完全无法理解的段错误,但它编译了。
为什么?
GLfloat* array = new GLfloat(x * y * z);
创建一个名为
array
的指针,指向类型为 GLfloat
且值为 x * y * z
的对象。
嗯,
new T()
的结果是T*
,因此new GLFloat
将返回GLFloat*。只要 x*y*z
可以有效地传递给 GLFloat 构造函数,它就是有效的代码。
这与以下内容相同:
int * p = new int(42);
嗯,第一个表达式是一个指向值为 (xyz) 的 GLfloat 的指针,这是完全合法的。