Assalomu alaykum, yordam.uz saytimizga xush kelibsiz.
Bu saytda o`zingizni qiziqtirgan savollarga javob olishingiz va o`z sohangiz bo`yicha savollarga javob berishingiz mumkin. Bizning Oilamizga a'zo bo`lganingiz uchun chuqur Minnatdorchilik bildiramiz !!!

Destructor qanday ishlaydi

+5 ovoz
85 marta ko‘rilgan
so‘radi 18 dekabr, 16 Unknown (802 bal)
teglar o‘zgartirildi 18 dekabr, 16 Saidolim

Assalomu Alaykum.

Javada "destructor"  ishini Musorlarni Yig'uvchi(Garbage Collector) qiladi. Boshqa tillarda destructor qanday ishlaydi? Misol uchun c++ da yoki C oilasiga oid boshqa tillarda qachon va qanday obyectni yo'q qiladi (destroy) qiladi .

1 ta javob

+3 ovoz
javob berdi 19 dekabr, 16 Unknown (802 bal)
tanlangan 22 dekabr, 16 Unknown
 
Eng yaxshi javob

Va alaykum Assalom

C++ agar Garbage collector yuq. Shu sababli Class ichidan xotiradan ajratilgan o'zgaruvchilar o'zzidan o'zi o'chmaydi. Ularni o'chirish(delete) qilish kerak. Bu ish asosan Desctructorda qilinadi. Lokal o'zgaruvchilar blockda({}) chiqqanda pointerlar esa delete(o'chirish, bundan keyin delete) buyruq bajarilganda destructor avtomatik chaqiriladi. 

C++ da misol:
class1::~class1(void)
  {
    delete resource1;
    delete resource2;
    etc...
  }

 

Destructorni siz umuman chaqirmaysiz. delete a; busa a ni destruktori avtomatik chaqiriladi, ya'ni delete bilan. 
"In object-oriented programming, a destructor (sometimes shortened to dtor) is a method which is automatically invoked when the object is destroyed." 

Java uchun bu logik kerak emas unda boshqacha.

C++ tilida new yoke new[] bilan yaratilgan objectlar  faqat delete (delete []) chaqirilsa gina uchiriladi bulmasa shu ilova to'xtaguncha joyni chiqindi(musor) qilib olib turadi
Class *object = new Class();
...
object = NULL;

bunda obyekt o'chirilmaydi faqat siz endi u obyektni topolmaysiz xolos ;) 


Qayerda turadi bu obyekt?: 
Ramda qop ketadi. Faqat endi u joy band hisoblanmaydi. Muhit(Environment) blokni qo'yvoradi. Hohlagan dastur o'z ma'lumoti(datasi)ni yoza oladi.


Shuning uchun agar obyekt Constructorda  qandaydir xususiyat(property)larga "new" bilan joy ajratilsa Destructor da  shular delete(o'chiriladi) qilinadi (man shuning uchun destructor kerak). Uzini musorini har bir sinf(class) o'zi tozalaydi. shunisi yaxshida.

Garbage Collector dasturchi(developer) uchun qulaylik yaratadi. Obyektlarni o'chirish uchun qayg'uradi. Lekin buning uchun ham CPU dan resurs talab qiladi. Vaqti kelsa garbage collector ham ishlay olmay qolishi mumkin. Albatta ayrim hollarda. Masalan HashMaplarni tartibsiz concurrent ishlatilganda garbage collector ishlashi uchun virtual mashinani heap xotirasida joy tugab qoladi. Natijada GCexception buladi qiziq. O'zi xotirani to'lib qolishini oldini oladi lekin o'zini ishlashiga joy topolmaydi. Demak resurs kam hollarda(masalan mobile developing) garbage collectorsiz tillar yaxshi arxitektura hisoblanadi. Xuddi Objective-C kabi.


class ParentClass {
 int *parentIntPtr;
public:
 ParentClass() {
 printf("\ninvoked ParentClass()");
 parentIntPtr = new int;// allocate for int and return begin off address
 }
 ~ParentClass() {
 printf("\ninvoked ~ParentClass()");
 delete parentIntPtr;
 }
};

class OtherClass {
 public :
 OtherClass() {
 printf("\ninvoked OtherClass()");
 }
 ~OtherClass() {
 printf("\ninvoked ~OtherClass()");
 }
};

class ChildClass: ParentClass {
 int *intPtr;
 char *charPtr;
 OtherClass *otherClass;
public:
 ChildClass () {
 printf("\ninvoked ChildClass()");
 intPtr = new int[10];//int array
 charPtr = new char;
 otherClass = new OtherClass;
 }
 ~ChildClass() {
 printf("\ninvoked ~ChildClass()");
 delete intPtr;
 delete charPtr;
 delete otherClass;
 }
};

ChildClass *obj = new ChildClass;
...
delete obj;

bo'lganda birinchi ota(parent) constructor, keyin bola(child) constructor ishlaydi. Destructorda esa avval bola(child) keyin ota(parent) ishlaydi.

(Savol va javobim manbasi:  Telegramdagi UzbekDevelopers yopiq guruhidan olingan.)

Assalomu alaykum, yordam.uz saytimizga xush kelibsiz.

Bu saytda o`zingizni qiziqtirgan savollarga javob olishingiz va o`z sohangiz bo`yicha savollarga javob berishingiz mumkin.

Bizning Oilamizga a'zo bo`lganingiz uchun chuqur Minnatdorchilik bildiramiz !!!

Telegram kanal YordamUzRss

...