在Qt我明白,如果你創建從Qobject繼承的對象,並設置它的父,那麼家長負責刪除的孩子。我也明白,如果你在堆棧上創建對象,當它們超出範圍時它們將被刪除。刪除QStringList中Qt中
我不換我的頭周圍,我想在一個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(名單),因爲它需要一個指針,我也不能這樣做只是做:
delete list;
因爲它與刪除「預計指針‘,期待一個指針’給說法」的錯誤。
我得到段錯誤有:
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
}
我不我認爲這是相當的,甚至是接近的,是正確的。我如何最好地實現我想要的 - 即明確刪除列表中的所有項目,然後刪除列表本身?