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方法

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐