gpt4 book ai didi

c++ - 在 QTreeWidget 中插入元素时内存泄漏?

转载 作者:行者123 更新时间:2023-11-28 00:50:15 26 4
gpt4 key购买 nike

当我将元素插入到 QTreeWidget 中时,我会为 QStringListQTreeWidgetItem 分配内存

QStringList *temp;
while(other_elements)
{
temp = new QStringList();
temp->push_back("first_field");
temp->push_back("second_field");

items.append(new QTreeWidgetItem((QTreeWidget*)0, *temp));

element_iterator++;
}

myTreeWidget->insertTopLevelItems(0, items);

我读到 QTreeWidgetItem 在调用 clear() 函数时自动释放,但是 QStringList 呢?是内存泄漏吗?

最佳答案

你的代码会泄漏,但不是你想的那样。

QTreeWidgetItem 维护的 QStringList 将与树项一起删除 - 这会正常工作。

但是您分配的temp 不会。当您将该 *temp 传递给构造函数时,该项目会存储它的一个拷贝。您分配的对象在构造函数调用后仍然存在并且很长一段时间 - 由于您没有删除它,所以它被泄露了。

将您的代码更改为以下内容以避免泄漏和不必要的堆分配:

while(other_elements)
{
QStringList temp;
temp.push_back("first_field");
temp.push_back("second_field");

items.append(new QTreeWidgetItem((QTreeWidget*)0, temp));

element_iterator++;
}

关于c++ - 在 QTreeWidget 中插入元素时内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14550767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com