gpt4 book ai didi

c++ - Qt中删除QStringList

转载 作者:太空宇宙 更新时间:2023-11-04 16:24:49 28 4
gpt4 key购买 nike

在 Qt 中,我了解到如果您创建一个继承自 QObject 的对象并将其设置为父对象,则父对象负责删除子对象。我也明白,如果你在堆栈上创建对象,当它们超出范围时它们就会被删除。

我不会考虑我想明确删除 QStringList(或任何 QList)中的项目然后删除列表本身的情况。

考虑我是否创建一个 QStringList 并像下面那样填充它:

QStringList multiPartPortionList;
multiPartPortionList = multiPartPortion.split(QRegExp("[\r\n]"),QString::SkipEmptyParts);

然后我用它做一些事情并调用这个方法来尝试明确删除列表中包含的项目,然后是列表本身:

void MyClass::deleteList(QStringList list) {

// Now cleanup
QStringList *delList = new QStringList(list);
int numObjects = delList->count();
for (int i=0; i < numObjects; i++)
delete (new QString(list.takeAt(0)));
delList->clear();
delete delList;
delList = 0;

}

我不能调用 qDeleteall(list) 因为它需要一个指针,而且我也不能只做:

delete list;

由于'给'delete'的参数,预期的指针'错误,期待一个指针。

我遇到段错误:

void MyClass::deleteList(QStringList list) {

// Now cleanup
QStringList *delList = &list; // <--- Seg fault with this
int numObjects = delList->count();
for (int i=0; i < numObjects; i++)
delete (new QString(list.takeAt(0)));
delList->clear();
delete delList;
delList = 0;

}

我也遇到段错误:

void MyClass::deleteList(QStringList list) {

// Now cleanup
QStringList *delList = &list;
int numObjects = delList->count();
for (int i=0; i < numObjects; i++)
delete &(list.takeAt(0)); // <--- Seg fault with this
delList->clear();
delete delList;
delList = 0;

}

然后我也遇到段错误:

void MyClass::deleteList(QStringList list) {

// Now cleanup
QStringList *delList = new QStringList(list);
int numObjects = delList->count();
for (int i=0; i < numObjects; i++)
delete (new QString(list.takeAt(0)));
delList->clear();
delete delList;
delList = 0;
delete &list; // <--- Seg fault with this

}

我不认为这完全正确,甚至接近正确。我怎样才能最好地实现我想要的 - 即显式删除列表中的所有项目,然后删除列表本身?

最佳答案

您的 QStringList 列表 在函数结束时自动删除。无需担心删除此处的指针。

同理,

QStringList *delList = new QStringList(list);

应该是

QStringList delList = QStringList(list);

更好的是:

QStringList delList = list;

您应该阅读有关自动存储和 RAII 的内容。在您的代码中,newdelete 是多余的。

要删除列表中的元素,请使用 removeAt .这与删除无关。

我还建议您获得 good book在继续使用 C++ 之前。

关于c++ - Qt中删除QStringList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13147427/

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