【发布时间】:2014-10-16 09:40:46
【问题描述】:
我在我的代码中发现了一个疯狂的错误。
我写了以下行:
GLfloat* points = new GLfloat(1024);
而不是
GLfloat* points = new GLfloat[1024];
我只是注意到它。在我注意到错误之前,我的代码已经编译并运行了几次。我意识到这是侥幸,但我的问题是我最初的线路是做什么的?
我注意到它看起来有点像使用指向已分配内存的指针创建一个类。它是否会在堆上创建一个初始值为1024.0 的 GLfloat?如果这是真的,为什么它是有效的语法? (GLfloat 不是一个类,是吗?)
【问题讨论】:
-
内置类型的构造函数调用或值初始化。
-
值初始化:codepad.org/KDPyKSMG
-
这就是你使用
new[]... :) -
@user3728501:
std::vector. -
@user3728501: 如果
std::vector不适合任何环境,那么new[](或new)和malloc也不适合那里。标准容器的默认分配器使用堆,就像new和malloc一样(但可能比任何基于手动调用new或malloc的自写容器机制更好)。如果您需要替换静态数组,请使用std::array或boost::array。
标签: c++