首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除Qt中的QStringList

删除Qt中的QStringList
EN

Stack Overflow用户
提问于 2012-10-30 20:53:24
回答 1查看 5K关注 0票数 0

在Qt中,我理解如果您创建一个从QObject继承并设置其父对象的对象,那么父对象负责删除这些子对象。我还了解到,如果在堆栈上创建对象,则当对象超出作用域时,这些对象将被删除。

我并不是想要显式地删除QStringList (或任何QList )中的项目,然后删除列表本身的情况。

考虑一下,如果我创建了一个QStringList并按如下方式填充它:

代码语言:javascript
复制
QStringList multiPartPortionList;
multiPartPortionList = multiPartPortion.split(QRegExp("[\r\n]"),QString::SkipEmptyParts);

然后,我使用它并调用此方法,试图显式删除列表中包含的项,然后调用列表本身:

代码语言:javascript
复制
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(列表),因为它需要一个指针,而且我也不能这样做:

代码语言:javascript
复制
delete list;

因为它错误的‘参数给’删除‘,预期指针’,期待一个指针。

我通过以下几个方面得到分段错误:

代码语言:javascript
复制
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;

}

我还可以通过以下方法获得分段错误:

代码语言:javascript
复制
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;

}

然后,我还得到了以下几个部分的错误:

代码语言:javascript
复制
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

}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-30 20:58:01

在函数的末尾自动删除QStringList list。无需担心删除这里的指针。

以同样的方式,

代码语言:javascript
复制
QStringList *delList = new QStringList(list);

应该是

代码语言:javascript
复制
QStringList delList = QStringList(list);

更好的是:

代码语言:javascript
复制
QStringList delList = list;

你应该读有关自动存储和RAII的文章。在您的代码中,newdelete是多余的。

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

我还建议您在继续使用好书之前先得到一个C++。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13147427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档