PDA

View Full Version : مبتدی: مخرب کننده ها



smemamian
سه شنبه 22 اسفند 1391, 09:03 صبح
سلام دوستان

کی مخرب کننده ها رو به صورت صریح در برنامه بیاریم ؟

the king
سه شنبه 22 اسفند 1391, 10:42 صبح
سلام دوستان

کی مخرب کننده ها رو به صورت صریح در برنامه بیاریم ؟

وقتی لازم باشه موقع نابود شدن شیء کاری خاصی انجام بشه. فرضا می خواهید تعداد شیء هایی که ایجاد شده رو بشمارید.
اگه موقع ایجاد شدن هر شیء یک متغیر خاص رو افزایش می دهید و می خواهید موقع نابود شدن شیء اون متغیر رو کاهش بدهید،
به کد مخرب کننده نیاز دارید تا اون کاهش مقدار رو داخلش اجرا کنید.

یا فرضا اگه موقع ایجاد شدن شیء یک مقدار حافظه رو بصورت پویا تخصیص می دهید (مثلا ;[a = new int[n ) این حافظه باید موقعی که
شیء نابود میشه آزاد بشه. کامپایلر بصورت خودکار این عمل رو انجام نمیده، پس به مخرب کننده نیاز دارید تا کد ;delete [] a رو اجرا کنه.

the king
سه شنبه 22 اسفند 1391, 23:34 عصر
یک مثال، کلاس Sample ای داریم که x تعداد اشیاء موجود ازش رو نشون میده. وقتی شی ای از نوع اش ساخته میشه مقدار x افزایش پیدا می کنه
و وقتی شیء ای نابود میشه مقدار x کاهش پیدا می کنه :

int x = 0;

class Sample
{
public :
Sample()
{
x++‎;
}

~Sample()
{
x--;
}
};


و در مثال زیر کلاس Sample یک متغیر رشته ای به نام s داره که حافظه اش بصورت پویا تخصیص پیدا می کنه و موقع نابود شدن شیء حافظه این
متغیر آزاد میشه :

class Sample
{
private :
char *s;
public :
Sample()
{
s = new char[10];
}

~Sample()
{
delete[] s;
}
};

Ananas
چهارشنبه 23 اسفند 1391, 00:16 صبح
در ضمن "مخرب کننده" اشتباهه "تخریب کننده" درسته. یا اینکه فقط بگیم مخرب (بدون کننده).