【发布时间】:2017-04-23 17:03:00
【问题描述】:
ma Model 类中的问题在于处理它所组成的每个网格。当它由 7 个网格组成时,首先调用析构函数 21 次。退出程序后,它被调用了 14 次。真的不知道我做错了什么。我能够将问题追溯到这段特定的代码。
void Model::processNode(aiNode *node, const aiScene *scene) {
for(unsigned int i = 0; i < node->mNumMeshes; i++) {
aiMesh* mesh = scene->mMeshes[node->mMeshes[i]];
mMeshes.push_back(processMesh(mesh, scene));
}
for(unsigned int i = 0; i < node->mNumChildren; i++) {
processNode(node->mChildren[i], scene);
}
}
mMeshes 是单个模型对象的网格私有向量。
编辑:
澄清一下,问题是当Mesh类的析构函数没有被注释掉时,它完全破坏了mMeshes向量中的一切。这是Mesh的析构函数
Mesh::~Mesh () {
glDeleteVertexArrays(1, &mVAO);
glDeleteBuffers(NUM_BUFFERS, mVBOs);
}
这是网格的向量。
std::vector<Vertex> mVertices;
和processNode的头部,它只是创建新的网格并将其返回给向量。
Mesh Model::processMesh(aiMesh *mesh, const aiScene *scene);
【问题讨论】:
-
什么是
mMeshes?processMesh是做什么的?processNode做什么?可能有一些你没有注意到的抄袭。 -
你可能忘了装饰你的复制构造函数。
-
mMeshes.push_back(processMesh(mesh, scene));那就是复制城市。 -
如果您没有发布任何这些类的声明或您所询问的它们的析构函数,我们将无法真正帮助您。
-
你为什么认为你在做某事错误?代码不起作用吗?看起来您只是在创建大量临时文件,编译器正在正确地发出代码进行清理。这不是非常有效,但也没有错误。
标签: c++ memory-management