תן לי להסביר לך משהו
אם אתה כותב ב++C אתה חייב להשתמש ב-DTOR מסודר להקצאות משאבים. זה לא רק נוחות. הסיבה היא exception safety אתן לך דוגמא:
void function() { get_resource1(); get_resource2(); // Suppose this function throws..... // call_a_routine(); // <-------------------- free_resource2(); free_resource2(); }
עכשיו נניח שהפונקציה באמצע זורקת exception. לתוכנית שלך יש leak. זה יכול להיות קובץ שנישאר פתוח, זיכרון, connection ועוד אלף ואחד סוגי משאבים שהתוכנית שלך צורכת. אם עוטפים יפה את המשאבים במחלקות פשוטות התוכנית שלך בטוחה יותר. אתן לך דוגמא טריויאלית:
struct C_File { C_File(const char* fname, const char* mode) { if ((fp = fopen(fname, mode) == 0) throw "Some Exception"; } ~C_File() { fclose(fp); } // dubious but just this example // operator FILE*() { return fp; } private: FILE* fp; };
העטיפה הזאת לא עולה לך גרוש בביצועים ומקום, אבל דואגת לניקוי אוטומטי על כל חריגה בלתי צפויה. את זה אתה מקבל בזכות פונקצית DTOR שנקראת אוטומטית כל אימת שיוצאים מ scope, הן אם בגלל exception והן ביציאה נורמלית.