Wann und warum sollte man noexcept in C++ tatsächlich verwenden?
Hallo Kollegen! Ich schreibe seit etwa einem Jahr C++ und nutze aktiv C++11/14. Ich sehe ständig das Schlüsselwort `noexcept` in Code und Bibliotheken, verstehe aber nicht ganz, wann man es wirklich anwenden sollte.
Zum Beispiel schreibe ich eine einfache Wrapper-Klasse für die Arbeit mit Dateien. So definiere ich normalerweise Methoden:
```cpp
class FileWrapper {
public:
FileWrapper(const std::string& filename) : file_(fopen(filename.c_str(), "r")) {
if (!file_) throw std::runtime_error("Cannot open file");
}
~FileWrapper() {
if (file_) fclose(file_);
}
bool is_open() const { return file_ != nullptr; }
std::string read_line() {
// ... kann eine Ausnahme bei Lesefehlern werfen
}
void close() {
if (file_) { fclose(file_); file_ = nullptr; }
}
private:
FILE* file_;
};
```
Fragen:
1. Muss man den Destruktor mit `noexcept` markieren? Ich habe gehört, dass Destruktoren standardmäßig `noexcept` sind, aber sollte man es explizit schreiben?