在与此相关之前,我已经在这里看到了其他问题,但我的问题并不围绕包含指针的QVector。
我有一个'Mesh'类,其中包含几个QVector< T>,用于保持顶点,索引,法线等,都作为标准对象保存。
最近我注意到每次删除网格时,我的应用程序使用的内存量不会减少。我一直在使用Windows任务管理器监视我的应用程序内存使用情况,并且已经看到它高达1000mb而不丢弃一个字节。
我已经通过调试器验证了我正在接触我的网格类的解构器,并且我的向量正在被删除,但内存仍然没有被释放。
有问题的解构主义者:
Mesh::~Mesh()
{
QVector<QVector3D> *vertices = this->vertices;
QVector<QVector3D> *normals = this->normals;
QVector<QVector3D> *tangents = this->tangents;
QVector<QVector2D> *textures = this->UVMap;
QVector<GLushort> *indices = this->indices;
vertices->clear();
vertices->squeeze();
delete vertices;
normals->clear();
normals->squeeze();
delete normals;
tangents->clear();
tangents->squeeze();
delete tangents;
textures->clear();
textures->squeeze();
delete textures;
indices->clear();
indices->squeeze();
delete indices;
}
我使用了Visual Leak Detector,它似乎主要显示我正在使用的库(Qt)中的泄漏,除了告诉我一些构造函数正在泄漏,如下所示:
Mesh::Mesh()
{
vertices = new QVector<QVector3D>();
indices = new QVector<GLushort>();
UVMap = new QVector<QVector2D>();
normals = new QVector<QVector3D>();
tangents = new QVector<QVector3D>();
}
但是我没有看到任何问题,因为这些对象在这些调用之前没有被初始化。
我真的对智能指针知之甚少,但是我不愿意切换我的应用程序中的所有东西来使用它们,因为我不知道它们是否能帮助真正或完全取代我目前的使用情况的问题。例如,我可能会将一些指针(例如整个网格)传递给另一个类,但我可能不希望其他类在自身销毁时删除该网格。
修改: 我以为我有一个写得很好的问题,但似乎人们更愿意代之以倒卖。我会尝试其他程序来监控我的问题。
答案 0 :(得分:1)
根本没有任何内存泄漏。以下是valgrind
==7881== Memcheck, a memory error detector
==7881== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==7881== Using Valgrind-3.10.0.SVN and LibVEX; rerun with -h for copyright info
==7881== Command: ./abstractitemmodel
==7881==
==7881==
==7881== HEAP SUMMARY:
==7881== in use at exit: 0 bytes in 0 blocks
==7881== total heap usage: 8 allocs, 8 frees, 168 bytes allocated
==7881==
==7881== All heap blocks were freed -- no leaks are possible
==7881==
==7881== For counts of detected and suppressed errors, rerun with: -v
==7881== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
如果你真的想检查内存泄漏,你应该使用valgrind
等专业软件(对于linux)。valgrind
是一个很好的工具。