多次被称为驱动器
Destructor is called multiple times and out of place
ma模型类中的问题是处理它组成的每个网格。当它由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是单个模型对象网格的私人向量。
编辑:
澄清,问题是,当未评论网格类的击曲线时,它会完全破坏MMESHES向量的所有内容。这是网格的攻击方
Mesh::~Mesh () {
glDeleteVertexArrays(1, &mVAO);
glDeleteBuffers(NUM_BUFFERS, mVBOs);
}
这是网格的向量。
std::vector<Vertex> mVertices;
和process节点的标题,它只是创建新的网格并将其返回向量。
Mesh Model::processMesh(aiMesh *mesh, const aiScene *scene);
如果您没有在向量中保留足够的内存来容纳新元素,则当添加新元素时,向量可以重新关注内存。在这种情况下,它将分配新的内存扩展,并将所有元素从旧的内存范围复制到新元素。因此,将元素复制到新地方后,删除了旧地方的元素。此外,成员函数push_back
可以处理将复制到向量的临时对象,然后将删除。
这是一个指示的程序
#include <iostream>
#include <vector>
#include <string>
struct A
{
std::string s;
A(const std::string &s) : s(s)
{
std::cout << "Object " << this->s << " is created" << std::endl;
}
A( const A &a ) : s( "copy of " + a.s )
{
std::cout << "A " << this->s << " is created" << std::endl;
}
~A()
{
std::cout << "Object " << s << " is deleted" << std::endl;
}
};
int main()
{
{
std::vector<A> v;
v.push_back(A("A"));
v.push_back(A("B"));
v.push_back(A("C"));
}
}
它的输出看起来像
Object A is created
A copy of A is created
Object A is deleted
Object B is created
A copy of copy of A is created
Object copy of A is deleted
A copy of B is created
Object B is deleted
Object C is created
A copy of copy of copy of A is created
A copy of copy of B is created
Object copy of copy of A is deleted
Object copy of B is deleted
A copy of C is created
Object C is deleted
Object copy of copy of copy of A is deleted
Object copy of copy of B is deleted
Object copy of C is deleted
相关文章:
- 为什么当"::"的行为不像运算符时被称为'scope resolution operator'?
- 为什么C++被称为语言联盟?
- 这应该被称为互斥锁吗?
- 在 c++ 中,为什么 -> 被称为二进制中缀指针成员访问运算符?
- 复制ctor被称为而不是移动ctor-可以编译器发出警告
- 覆盖 CAST 运算符(我认为它被称为向下转换)
- 私有非虚拟基类函数被称为派生类中的函数
- 为什么在使用对象作为多映射中的键时,驱动器被称为远远不够
- 持续的指示持续的指针被称为
- 多次被称为驱动器
- 为什么SelectObject被称为两次
- 为什么Qwizard :: NextID()被称为两次
- C++对象声明被称为抽象
- 为什么击改变人被称为两次
- 特定的位数可以被称为标志吗
- 为什么委托或闭包通常被称为真正的"object-oriented function pointers"?
- 为什么它被称为重叠I/O
- 这个C++14构造被称为什么,它似乎链接了lambdas
- 我如何在图中找到双分量?被称为块
- CoInitialize()在c++中没有被称为异常