C++ std::vector的正确分配

C++ std::vector的正确分配,c++,opengl,C++,Opengl,将std::vector赋给另一个类时遇到问题。我将数据放入std::vector并将其放入一个名为“Mesh”的类中。“网格”变成了一个“模型” 如何将数据正确地引入其他类 我也不确定mesh类的构造函数的工作方式。 第h节: 还有,改变 Mesh::Mesh(std::vector<float> positionVertices) : Mesh::Mesh(标准::向量位置顶点): 到 Mesh::Mesh(常数std::向量和位置顶点): 所以你没有对向量进行不必要的复制

将std::vector赋给另一个类时遇到问题。我将数据放入std::vector并将其放入一个名为“Mesh”的类中。“网格”变成了一个“模型”

如何将数据正确地引入其他类

我也不确定mesh类的构造函数的工作方式。 第h节:

还有,改变

Mesh::Mesh(std::vector<float> positionVertices) :
Mesh::Mesh(标准::向量位置顶点):

Mesh::Mesh(常数std::向量和位置顶点):

所以你没有对向量进行不必要的复制。

离题:
std::vector position顶点{-0.5f,-0.5f,0.5f,-0.5f,-0.5f,0.5f}我在提供的代码中没有看到任何错误,它可能在其他地方。请。显示的代码没有明显的问题,因此问题一定在未显示的代码中。您可以显示
Mesh
Model
类的构造函数吗@maniel34@Chase是的,我现在把它们放到问题里了。现在,我也认为这一定是原因。我不同意最后一个更改:通过引用获取
向量
不会有帮助,因为
向量
仍然会被复制到
网格::位置顶点
。一个人可以移动它,但否则我会将它作为副本保存,这样接口的可读性更好(Mesh的接口说“我复制这个”,而不是“我可能会存储对这个的引用,所以确保它在我的整个生命周期中都保持活动”,这会有所不同)@Tas如果const ref没有传递它,它将从原始变量复制到构造函数调用中,然后再次复制到成员变量中。我想请大家注意,我非常怀疑任何一个值得重视的编译器都不会忽略其中一个副本,而就我个人而言,我更希望我的界面清楚地显示一个副本,而不是用户必须担心存储的引用。假设OP没有用10000个大的向量创建10000个
Mesh
,即使有拷贝,也很可能没有意义。不管怎样,这些只是我的意见,我没有投反对票,你的答案仍然是正确的。很明显,因为你不能存储一个
常量&
(没有你不应该做的指针把戏),你只能从中阅读和复制。这就是为什么我认为你的观点被误导的原因,这就是我链接到的文章的要点,也是我链接那篇文章的原因。当然你可以存储一个
const std::vector&
,为什么你不能呢?您有一个对原始
向量的引用,当它发生更改时,您将收到这些更改,但您无法更改它。因此,如果生成一个局部向量,然后将其赋予
网格
的一个实例(该实例比
向量
更有效),则会出现问题。当然,在任何给定的小例子中,事情都会很好,但我在专业上遇到了传递参考的问题。对于任何给定的函数,它们都是首选的,但是将它们放入构造函数是一个坏主意,因为类可能存储引用。
// Store the vertices
float* dataPtr = &data[0];
glBufferData(GL_ARRAY_BUFFER, data.size() * sizeof(float), dataPtr, GL_STATIC_DRAW);
// Mesh.h
class Mesh
{
public:
    std::vector<float> positionVertices;

    Mesh(std::vector<float>);
    ~Mesh();
};
// Mesh.cpp
Mesh::Mesh(std::vector<float> positionVertices) : positionVertices(Mesh::positionVertices)
{
}
// Model.h
class Model
{  
public:
Mesh mesh;
unsigned int vertexArray;
unsigned int vertexCount;

Model(Mesh);
~Model();

void storeData(std::vector<float> data, const unsigned int index, const unsigned int size);
};
// Model.cpp
Model::Model(Mesh mesh) : mesh(Model::mesh)
{ ... }
// Mesh.cpp
Mesh::Mesh(std::vector<float> positionVertices) :
positionVertices(Mesh::positionVertices) // Here's the problem
{
}
positionVertices(positionVertices)
Mesh::Mesh(std::vector<float> positionVertices) :
Mesh::Mesh(const std::vector<float>& positionVertices) :