最近很累,写了如下代码:
GLfloat* array = new GLfloat(x * y * z);
其中,当然应该是:
GLfloat* array = new GLfloat[x * y * z];
(注意方括号而不是括号。)
据我所知,第一种形式无效,但 g++ 编译了它。当然,它吐出了一个完全无法理解的段错误,但它编译了。
为什么?
最近很累,写了如下代码:
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()
是 a T*
,所以new GLFloat
会返回一个 GLFloat*。只要x*y*z
传递给 GLFloat 构造函数是有效的,它就是有效的代码。
这与以下内容相同:
int * p = new int(42);
嗯,第一个表达式是一个指向值为 (x y z) 的 GLfloat 的指针,这是完全合法的。