Проблема в классе 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 - частный вектор сетки для одного объекта модели.
Edit:
Чтобы уточнить, проблема заключается в том, что, когда деструктор класса Mesh не закомментирована, он полностью уничтожает все в mMeshes векторе. Это деструктор сетки
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'? Вероятно, происходит какое-то копирование, которое вы не заметите. –
Возможно, вы забыли украсить свой конструктор копий. – NathanOliver
'mMeshes.push_back (processMesh (сетка, сцена)); это копия города прямо там. –