¿Cuándo y por qué realmente se debe usar noexcept en C++?
¡Hola, colegas! Llevo aproximadamente un año escribiendo en C++, usando activamente C++11/14. Constantemente veo en el código y las bibliotecas la palabra clave `noexcept`, pero no termino de entender cuándo realmente debe aplicarse.
Por ejemplo, estoy escribiendo una clase envoltorio simple para trabajar con archivos. Así es como suelo definir los métodos:
```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() {
// ... puede lanzar una excepción en caso de error de lectura
}
void close() {
if (file_) { fclose(file_); file_ = nullptr; }
}
private:
FILE* file_;
};
```
Preguntas:
1. ¿Es necesario marcar `noexcept` en el destructor? He oído que los destructores son `noexcept` por defecto, pero ¿vale la pena escribirlo explícitamente?