דף הבית שיעורים מחלקות מפרקים
 
מפרקים
 
בשיעור הקודם ראינו שבנאים נקראים אוטומטית כאשר אובייקט נוצר. האם יש פונקציה שנקראת אוטומטית כאשר אובייקט מושמד? התשובה היא כן, פונקציה כזאת נקראת מפרק (destructor).
נתבונן במחלקה שיצרנו בשיעורים קודמים - מחלקת Date, ונוסיף לה את הכרזת המפרק:

class Date {
public:
 int day;
 int month;
 int year;
 Date(int y, int m=1, int d=1);
 ~Date();
 long GetJulian();
 void AddDays(int days);
};
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

הכרזת המפרק נראית כמעט כמו הכרזת הבנאי: אין לה ערך מוחזר, וכמו בבנאי, שמה מבוסס על שם המחלקה. השוני היחיד הוא סימן ה- ~ המתווסף לתחילת השם.
דבר נוסף ששונה במפרקים הוא שלעולם הם אינם מקבלים פרמטרים, זאת מכיוון שהקריאה למפרק נעשית בעת השמדת האובייקט, פעולה המתבצעת לעיתים ללא פקודה ישירה לכך, אלא לדוגמא בעת שהתוכנית מסתיימת, כך שלא ניתן להעביר פרמטרים למפרק.
בעקבות כך, לכל מחלקה יכול להיות מפרק אחד בלבד.
עבור רוב המחלקות בנאי הוא דבר שימושי, מכיוון שכמעט תמיד יהיו משתנים אותם נרצה לאתחל עם בניית האובייקט. לעומת זאת, מפרקים אינם נחוצים לעיתים קרובות.
מפרק נחוץ רק כאשר יש פעולה האמורה להתבצע כאשר האובייקט מושמד.
לדוגמא, נוסיף למחלקת Date משתנה בשם title, המצביע למחרוזת המציגה את התאריך:

class Date {
public:
 int day;
 int month;
 int year;
 char *title;
 Date(int y, int m=1, int d=1);
 ~Date();
 long GetJulian();
 void AddDays(int days);
};
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

במקרה זה, ניתן להקצות זיכרון למחרוזת בבנאי:

Date::Date(int d, int m, int y)
{
 day = d;
 month = m;
 year = y;
 title = new char[32];
}
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

ולשחרר את הזיכרון במפרק, אשר ייקרא אוטומטית כאשר אובייקט ה-Date יושמד:

Date::~Date()
{
 delete []title;
}
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט