モデルクラスの問題は、それが構成する各メッシュを処理することです。 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は、単一のModelオブジェクトのメッシュのプライベートベクターです。
編集:
明確にするために、問題がメッシュクラスのデストラクタがコメントアウトされていない場合、それは完全に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(mesh、scene));'そのコピーシティがそこにあります。 –