PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QPtrList temporär bearbeiten



Firebird
10-11-2003, 14:35
Ich hab so'n... naja kein richtiges Problem, aber ich bin mir nicht so ganz sicher ob es für dass was ich machen will eine einfache Möglichkeit gibt.

Also ich hab eine Klasse die alle Einstellungen des Programms ausliest, in Objekten speichert und beim beenden wieder speichert. Die Einstellungen werden dabei Teilweise in QPtrList's gespeichert.

Der Einstellungs-Dialog meines Programms holt sich die Einstellungen aus dieser Klasse, und zwar in Form von Zeigern auf die QPtrList's.

Das Problem ist jetzt dass der Einstellungsdialog die Objekte natürlich nicht richtig bearbeiten soll, sondern nur Temporär, weil die Einstellungen ja nur gespeichert werden sollen, wenn der User danach auf OK (und nicht auf Abbrechen) drückt.

Eine Möglichkeit wäre jetzt, die QPtrList komplett zu kopieren. Aber wie? Eine Kopie der QPtrList reicht ja nicht, sondern auch die Objekte müssen kopiert werden. Und das nächste Problem ist, wie kopiere ich Zeiger-Objekte? Wenn ich einem Zeiger einen anderen zuweise, wird nur der Zeiger kopiert, und nicht das Objekt, ich will aber dass das komplette Objekt kopiert wird.

Wenn ich folgendes mache:

Klasse zeiger1;
Klasse* zeiger2;

zeiger1 = .....;

zeiger2 = &(*zeiger1);
Zeigt zeiger2 dann auf das gleiche Objekt wie zeiger1, oder ein anderes?

anda_skoa
10-11-2003, 17:28
Du kannst die Objekte über den Copykonstruktor kopieren.



Klasse* neuerZeiger = new Klasse(*alterZeiger);


Wenn deine Datenklassen dynamischen Speicher beinhalten, solltest du den Copykonstruktor überladen.


Klasse::Klasse(const Klasse& original)
{
// Elemente von original hierher kompieren
// bei dynamischen Speicher entsprechend aufpassen

zahl = original.zahl; // zahl zb ein int

zahlPointer = new int(); // neuen Speicher reservieren
*zahlPointer = *original.zahlPointer; // inhalt kopieren
}


Ciao,
_