343 Stimmen

Das Werfen von Ausnahmen aus Konstruktoren

Ich habe eine Debatte mit einem Kollegen über das Werfen von Ausnahmen von Konstruktoren, und dachte, ich würde gerne etwas Feedback.

Ist es aus gestalterischer Sicht in Ordnung, Ausnahmen von Konstruktoren auszulösen?

Angenommen, ich wickle eine POSIX-Mutex in eine Klasse ein, dann würde das in etwa so aussehen:

class Mutex {
public:
  Mutex() {
    if (pthread_mutex_init(&mutex_, 0) != 0) {
      throw MutexInitException();
    }
  }

  ~Mutex() {
    pthread_mutex_destroy(&mutex_);
  }

  void lock() {
    if (pthread_mutex_lock(&mutex_) != 0) {
      throw MutexLockException();
    }
  }

  void unlock() {
    if (pthread_mutex_unlock(&mutex_) != 0) {
      throw MutexUnlockException();
    }
  }

private:
  pthread_mutex_t mutex_;
};

Meine Frage ist: Ist dies die Standardmethode? Denn wenn die pthread mutex_init Aufruf fehlschlägt, ist das Mutex-Objekt unbrauchbar, so dass das Auslösen einer Ausnahme sicherstellt, dass der Mutex nicht erstellt wird.

Sollte ich lieber eine Mitgliedsfunktion init für die Mutex-Klasse erstellen und die pthread mutex_init in dem ein bool zurückgegeben wird, das auf pthread mutex_init Rückkehr? Auf diese Weise muss ich keine Ausnahmen für ein solches Low-Level-Objekt verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X