Exception oder Signal für Fehlerausgabe?

Alles rund um die Programmierung mit Qt
Antworten
Massimo B.
Beiträge: 45
Registriert: 14. Juni 2006 11:05
Wohnort: Bonn, Germany

Exception oder Signal für Fehlerausgabe?

Beitrag von Massimo B. »

Hallo.

Auf für einfache Fehlermeldungen habe ich bisher gerne Exceptions verwendet:

Code: Alles auswählen

if (size==0) {
	throw QString( "No layout found!" );
}

//...
try{
//...
}
catch (QString& errmsg) {
	QMessageBox::warning(this, tr( "File error" ), errmsg);
}
Nun bietet aber Qt für den Informationstransport Signals/Slots. Ist das eher zu empfehlen?
Gentoo (x86,ppc), KDevelop, Qt3, Qt4
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Meine Erfahrung ist, daß Exceptions in den meisten Projekten nicht verwendet wird, weil es die Leute einfach nicht können (mich eingeschlossen). Aber ich denke es spricht nichts dagegen sie zu verwenden. Wenn ich mich nicht täusche kann man damit mehr Fehler auch einfacher abfragen, als wenn man es per Hand machen muß, oder?
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Problem bei Exceptions ist IMHO häufig die Speicherverwaltung. Man muss aufpassen keine Speicherlöcher zu verursachen wenn eine Exception geworfen wurde.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ausserdem gibt es Probleme wenn exceptions über sharedLib-Grenzen gehen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Massimo B.
Beiträge: 45
Registriert: 14. Juni 2006 11:05
Wohnort: Bonn, Germany

Beitrag von Massimo B. »

Ich habe nun die besagten Exception Konstruktionen umgebaut.
Bisher wurde eine Memberfunktion mit try{a->doThis()} ausgeführt und gleich danach der QString mit catch aufgefangen. Das Programm wurde dadurch sehr unübersichtlich.
Nun habe ich meist einen bool Rückgabewert, um zu testen, ob die Funktion erfolgreich war (ohne weitere Informationen) udn außerdem ein Signal newMessage(const QString&). Das Signal ist direkt mit einem Slot verknüpft, der einen Warning Dialog generiert. Das Programm ist nun besser zu lesen.
Ich wollte nur anfangs gerne das volle Potential von C++ ausschöpfen.

Nebenbei: Für Klassen, die Qt-frei gehalten werden sollen, verwende ich ein Watcher-Objekt. Die freie Klasse hält einen Pointer auf das Watcher-Objekt, welches selbst Qt-Signale sendet.
Gentoo (x86,ppc), KDevelop, Qt3, Qt4
Antworten