【发布时间】:2019-11-07 17:15:41
【问题描述】:
我目前有一个小型 OpenGL 项目,其中我在堆上创建了一个数组,
float* vertices = new float[48] {
0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, // front top right, 0
0.5f, -0.5f, 0.5f, 0.0f, 1.0f, 0.0f, // front bottom right, 1
-0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, // front bottom left, 2
-0.5f, 0.5f, 0.5f, 0.4f, 0.8f, 0.2f, // front top left, 3
0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f, // back top right, 4
0.5f, -0.5f, -0.5f, 0.0f, 1.0f, 0.0f, // back bottom right, 5
-0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 1.0f, // back bottom left, 6
-0.5f, 0.5f, -0.5f, 0.4f, 0.8f, 0.2f // back top left, 7
};
我预计将其扩展到数百或一千个值。因此,我想使用std::unique_ptr。我查看了文档,似乎无法像原始数组指针一样初始化std::unique_ptr。尽管如此,我已经尝试过写这样的东西,
std::unique_ptr<float[]> vertices(new float[48]) {
0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, // front top right, 0
0.5f, -0.5f, 0.5f, 0.0f, 1.0f, 0.0f, // front bottom right, 1
-0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, // front bottom left, 2
-0.5f, 0.5f, 0.5f, 0.4f, 0.8f, 0.2f, // front top left, 3
0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f, // back top right, 4
0.5f, -0.5f, -0.5f, 0.0f, 1.0f, 0.0f, // back bottom right, 5
-0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 1.0f, // back bottom left, 6
-0.5f, 0.5f, -0.5f, 0.4f, 0.8f, 0.2f // back top left, 7
};
无法编译。
是否可以像使用原始指针数组一样初始化 unique_ptr 数组?
我曾考虑过使用std::vector,然后使用unique_ptr“捕获”它,尽管我还没有尝试过。
【问题讨论】:
-
std::vector<float> vertices = { ... }就完成了。 -
在第一个代码sn-p中,
vertices的类型是“指向浮点的指针”。第二,它应该是“unique_ptr to float”。正如所写,它是“指向浮动指针的唯一指针”。 -
如果您因为需要指针而避免使用向量,请注意
vertices.data()或&vertices[0]将为您提供指向“数组”的指针。 -
初始化器属于浮点数组,所以移动括号。之后应该工作。不过,向量可能更合适。
标签: c++ arrays initialization std unique-ptr