Ich habe eine Klasse wie folgt:Sollte ich eine Ausnahme werfen, einen Fehlercode zurückgeben oder ein Protokoll ausdrucken und abbrechen()?
class MyBuffer
{
private:
char* ptr_;
public:
MyBuffer(char* ptr_tmp) : ptr_(ptr_tmp) {};
void write_data(int val)
{
if(ptr_ == NULL)
{
// What should I do here?
// throw an exception, return error code, or just abort()?
}
// Write val to the buffer pointed by ptr_
// ...
}
};
ptr_ nach der Initialisierung nicht geändert werden kann. Das bedeutet, dass die Anweisung ptr_ == NULL
nur dann true
ist, wenn Entwickler einen NULL-Zeiger im Konstruktor übergeben. Wenn dies der Fall ist, entweder eine Ausnahme auslösen oder einen Fehlercode zurückgeben, sollte der Behandlungscode das Programm TERMINATE sofort beenden.
Ich habe mehrere Diskussionen über Ausnahmen und Fehler gelesen. Es scheint mir, dass eine Ausnahme für "prädiktive", aber "außergewöhnliche" Fälle verwendet werden sollte. In meinem Beispiel, wenn ptr_ == NULL
wahr ist, wäre dies keine Ausnahme, sondern ein Bug, oder?
Argumentieren, Sie bei der Initialisierung aus der Patsche helfen soll, wenn ein NULL-Zeiger übergeben, nicht zu einem unbekannten späteren Zeitpunkt. – mustaccio
@mustaccio Wenn ich 'NULL pointer' im Konstruktor überprüft hätte, müsste ich es später überprüfen (z. B. in write_data)? –