QStringList是否将数据存储在堆栈或堆上?

问题描述

在下面的代码中:

void fun()
{
    QString aa("aa");
    QString bb("bb");
    QStringList a;
    a<<aa;
    a<<bb;
}

我知道QString将其数据存储在堆上,但是QStringList呢?它是在堆栈上还是在堆上分配一个数组,并且仅将指向数组的指针存储在堆栈上?

解决方法

QList技术上是:

class QList
{
    QListData::Data* p;
};

其中QListData :: Data是:

struct Data 
{
    QtPrivate::RefCount ref;
    int alloc,begin,end;
    void *array[1];
};

所以QList本身会在堆上分配内存并存储指向它的指针。