QVector 内存泄漏中的 QString

QString's in QVector memory leak

本文关键字:QString 泄漏 内存 QVector      更新时间:2023-10-16

为什么当我填充QVector如下:

QVector< QPair<qint32, QString> > vector(10000000);
QString temp;
for (int i = 0; i < 10000000; ++i)
{
   temp = QString::fromUtf8("Vasya");
   vector.replace(i, qMakePair(i, temp));
}

我的程序使用了470mb的内存,当这个:

QVector< QPair<qint32, QString> > vector(10000000);
QString temp2 = "Vasya";
for (int i = 0; i < 10000000; ++i)
{
    vector.replace(i, qMakePair(i, temp2));
}

它只有90mb的RAM吗?

因为内部QString被优化为共享const对象的内存。第一种情况需要在每次调用fromUtf8时分配内存。在相反的第二种情况下,总是可以重用现有的const temp2的内存