متى ولماذا يجب استخدام noexcept في C++؟
مرحبًا أيها الزملاء! أكتب بلغة C++ منذ حوالي عام، وأستخدم بنشاط C++11/14. أرى باستمرار في الكود والمكتبات الكلمة المفتاحية `noexcept`، لكنني لا أفهم تمامًا متى يجب تطبيقها حقًا.
على سبيل المثال، أكتب فئة تغليف بسيطة للعمل مع الملفات. إليك كيف أعرّف الأساليب عادةً:
```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() {
// ... قد يرمي استثناءً عند خطأ القراءة
}
void close() {
if (file_) { fclose(file_); file_ = nullptr; }
}
private:
FILE* file_;
};
```
الأسئلة:
1. هل يجب وضع علامة `noexcept` على المدمر؟ سمعت أن المدمرات تكون `noexcept` افتراضيًا، لكن هل يستحق الأمر كتابتها صراحةً؟