Qt内存管理(二) qDeleteAll与clear
qDeleteAll:专门用于指针容器,对容器或者迭代器中的每个对象进行delete操作,而不是从容器中移除对象。源代码如下:void qDeleteAll(ForwardIterator begin, ForwardIterator end){while (begin != end){delete *begin;...
·
qDeleteAll:专门用于指针容器,对容器或者迭代器中的每个对象进行delete
操作,而不是从容器中移除对象。源代码如下:
void qDeleteAll(ForwardIterator begin, ForwardIterator end)
{
while (begin != end)
{
delete *begin;
++begin;
}
}
```
测试代码如下:
typedef struct _Defs
{
int a;
double d;
QString s;
} Def;
QList<Def*> defs;
for(int i=0;i<500000;i++)
{
Def* dd = new Def;
dd->a = 12;
dd->d = 4.23;
dd->s = "jda";
defs.append(dd);
}
qDebug()<<"before qDeleteAll: "<<defs.size();
qDeleteAll(defs);
qDebug()<<"after qDeleteAll: "<<defs.size();
defs.clear();
``
qDeleteAll`的情况下,程序占内存78M;加上之后,只占内存12M。但是前后的size没有变化。
运行结果发现,不调用
当T的类型为指针时,调用clear方法能置空,但并不能释放其内存。qDeleteAll可以释放容器元素内存,但没有对容器的置空操作,也就是size没变。所以qDeleteAll之后必须加上clear方法。
更多推荐
已为社区贡献1条内容
所有评论(0)