在QT中删除QStringList
Delete QStringList in Qt
在qt中,我知道,如果您创建一个从qObject继承并设置其父的对象,则父责任删除孩子。我也明白,如果您在堆栈上创建对象,则在它们脱离范围时被删除。
我没有将头缠绕在我想在QStringList(或任何QLIST)中明确删除项目的情况,然后删除列表本身。
考虑我是否创建QStringList并像以下那样填充它:
QStringList multiPartPortionList;
multiPartPortionList = multiPartPortion.split(QRegExp("[rn]"),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(列表),因为它期望指针,而且我也不能只做:
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 list
在功能末尾自动删除。无需担心在此处删除指针。
以相同的方式,
QStringList *delList = new QStringList(list);
应该是
QStringList delList = QStringList(list);
更好:
QStringList delList = list;
您应该阅读有关自动存储和RAII的信息。在您的代码中,new
和delete
是多余的。
要删除列表中的元素,请使用removeat。这与删除无关。
我还建议您在继续在C 之前得到一本好书。
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 删除所有字符串后如何恢复 QStringList?
- 如何通过比较彼此的成员从QStringList中删除元素
- 如何从 QStringList 中删除空字符串和空字符串
- 从QStringList中删除子目录,仅保留父母的目录
- 如何删除 QStringList 中的冗余元素
- 在QT中删除QStringList
- 使用迭代器从 QStringlist 中删除项目
- 从另一个QStringList中删除一个QStringList中包含的字符串
- QStringList删除字符串中的空格