در این قسمت تیم کدگیت را با آموزش Destructor در سی پلاس پلاس همراهی کنید. این جلسه آموزشی را با معرفی Destructor آغاز و سپس با پیاده سازی یک مثال واقعی آموزش را تمام میکنیم. پیش نیاز این آموزش شامل موارد زیر است:
Destructor در سی پلاس پلاس
در آموزشهای گذشته به معرفی Constructor پرداختیم. گفتیم که Constructor هنگام ساخت شی ایجاد میشود و اگر Constructor توسط ما نوشته نشود سی پلاس پلاس Default Constructor را صدا میزند. در این قسمت به معرفی تابع دیگری به نام Destructor میپردازیم. این تابع برخلاف Constructor، هنگام حذف شی صدا زده میشود. این تابع را میتوان برای آزاد سازی Memory یا فایل استفاده کرد. اما سوالی که مطح میشود این است که در چه مواقعی شی حذف میشود؟ در چند حالت شی میتواند حذف شود که در زیر آنها را معرفی کردیم:
- اتمام تابع
- اتمام برنامه
- اتمام یک بلاک
- استفاده از کلمه کلیدی delete
اما Destructor ویژگیهایی دارد که آن را از Constructor متمایز میکند:
- تابع Destructor دقیقا همنام با اسم کلاس است اما علامت ~ قبل از نام آن قرار میگیرد.
- تابع Destructor هیچ ورودی را نمیگیرد و هیچ مقداری را return نمیکند.
مثال Destructor در سی پلاس پلاس
با توجه به توضیحاتی که دادیم در این قسمت برای درک بهتر مسئله، مثال سادهای را خواهیم زد. کلاسی به نام Line داریم که یک متغیر عمومی Length دارد. یک Constructor و یک Destructor نیز در آن تعریف کردیم. کد این مثال به صورت زیر است:
class Line {
public:
void setLength(double len);
double getLength(void);
Line(); // This is the constructor declaration
~Line(); // This is the destructor: declaration
private:
double length;
};
// Member functions definitions including constructor
Line::Line(void) {
cout << "Object is being created" << endl;
}
Line::~Line(void) {
cout << "Object is being deleted" << endl;
}
void Line::setLength(double len) {
length = len;
}
double Line::getLength(void) {
return length;
}
// Main function for the program
int main() {
Line line;
// set line length
line.setLength(6.0);
cout << "Length of line : " << line.getLength() << endl;
return 0;
}
همانطور که در کد بالا میبینید، یک شی از جنس Line در تابع Main نوشتیم. سپس یک متن ساده را چاپ کردیم. حال خروجی کد را با ببینیم:
Object is being created
Length of line : 6
Object is being deleted
همانطور که میبینید در خروجی متنی که در Destructor نوشته شده چاپ شده است. در قسمت قبل یکی از شرطهای اجرای Destructor، اتمام برنامه بود که در این جا این شرط صدق میکند و تابع اجرا شد.