Qt list.clear()会破坏对象吗?

Nik*_*las 3 c++ qt qlist qtcore

假设我有以下列表:

QList<Type*> list;
list.add(new Type());
list.add(new Type());
list.add(new Type());
list.add(new Type());
list.add(new Type());
list.add(new Type());
Run Code Online (Sandbox Code Playgroud)

如果我想清空列表,我可以打电话 list.clear()

它会自动删除每个指针,还是必须执行以下操作以防止内存泄漏:

foreach (Type* t, list) delete t;
list.clear();
Run Code Online (Sandbox Code Playgroud)

lpa*_*app 10

不,它只是从列表中删除它们.你必须自己删除它.您可以在这里找到实施以确保:

template <typename T>
Q_OUTOFLINE_TEMPLATE void QList<T>::clear()
{
    *this = QList<T>();
}
Run Code Online (Sandbox Code Playgroud)

这里是文档说它只从列表中删除它们,但它没有删除:

void QList :: clear()

从列表中删除所有项目.

如果你想删除它们,我建议使用以下算法:

void qDeleteAll(ForwardIterator begin,ForwardIterator end)

使用C++删除运算符删除[开始,结束]范围内的所有项目.项类型必须是指针类型(例如,QWidget*).

例:

QList<Employee *> list;
list.append(new Employee("Blackpool", "Stephen"));
list.append(new Employee("Twist", "Oliver"));

qDeleteAll(list.begin(), list.end());
list.clear();
Run Code Online (Sandbox Code Playgroud)