Code: Alles auswählen
QList<double*> dataList;
QList<double*> tempList;
double* element;
// Eigentliche Datenliste erstellen
for ( int i = 0; i < anzahl; i ++ ) {
element = new double[laenge];
fillWithData(element);
dataList.append(element);
}
// Datenliste in temporäre Liste kopieren
for ( int i = 0; i < anzahl; i ++ )
tempList.append( dataList.at(i) );
// Jetzt Datenliste löschen und die temporäre Liste wieder in die Datenliste kopieren.
// Version 1
dataList.clear();
dataList = tempList;
// Version 2
clearVectorList( dataList );
dataList = tempList;
void clearVectorList(QList<double*>& list) {
for ( int i = 0; i < list.size(); ++i)
delete[] list[i];
list.clear();
}
Nachdem ich in der zweiten for Schleife die tempList gefüllt habe, sind die Daten noch nicht dupliziert worden, ich habe jetzt lediglich 2 QList mit den Zeigern auf die jeweils gleichen double Arrays, oder? Führe ich nun in Version 2 das clearVectorList(...) aus, dann wird zwar dataList vollständig abgebaut, die Daten können somit aber nicht mehr von tempList geshared werden und werden deshalb dabei neu angelegt?
Im Gegensatz dazu werden in Version 1 nur die Zeiger in dataList gelöscht und die eigentlichen Daten (das double Array) werden nach der Zuweisung dataList = tempList; wieder geshared?
Weiß jemand, was da genau hinter den Kulissen passiert?