Constructorii și distrugătorii sunt responsabili pentru existența unui obiect în memorie, adică aloca memoria pentru instanța clasei și apoi eliberați-o.
Un constructor este un tip special de subrutină atașat la o clasă. Valoarea sa on-line este de a crea reprezentanți (instanțe) ale clasei. Se comportă ca o funcție care returnează o referință la instanța nou creată a clasei, adică pe obiect. În același timp, memoria este alocată pentru a stoca valorile câmpurilor instanței clasei.
Un destructor este un tip special de subrutină atașat la o clasă. Scopul său este de a distruge o instanță a clasei, adică obiect și eliberați memoria alocată instanței.
Implementarea designerilor
Sarcina designerului este de a crea o instanță a clasei și de a executa afirmațiile conținute în corpul său. Atribuirea codului în interiorul constructorului - inițializați instanța nou creată a obiectului. Sintaxa pentru implementarea constructorului:
Implementarea constructorilor moșteniți.
Implementarea distrugătorilor
Distrugătorul distruge o instanță a clasei care a fost folosită când a fost apelată, eliberând automat orice memorie dinamică rezervată anterior de constructor, închizând fișiere și așa mai departe. operațiuni. Programatorul este responsabil pentru chemarea distrugătorilor pentru toate instanțele clasei dacă au fost rezervate obiecte subordonate.
Sintaxa pentru implementarea destructorului este:
Implementarea distrugătorilor moșteniți
Dacă utilizați mecanismul de distrugere a moștenirilor, puteți simplifica sarcina de a distruge instanțele clasei, astfel încât de fiecare dată să vă interesați doar de distrugerea acelor câmpuri care au fost adăugate în această clasă. Toate lucrările de curățare a câmpurilor moștenite pot fi atribuite distrugătorilor moșteniți. Pentru a apela distrugătorul moștenit, trebuie să utilizați cuvântul cheie mostenit.
Apelarea constructorilor
Dacă constructorul nu este definit în clasa de utilizatori, constructorul moștenit de la clasa descendentă va fi utilizat în mod implicit. În ambele cazuri, toate obiectele au acces la constructorul Creare definit în clasa TObject.
Definiția clasei creează o structură activă care poate crea reprezentanți ai acestei clase. Obiectele care sunt create folosind o definiție de clasă sunt capabile să stocheze linkuri către obiectele nou create.
• Dacă apelați constructorul în numele obiectului, obiectul nou nu va fi creat (nu este alocată nicio memorie), dar vor fi executate instrucțiunile specificate în codul constructor.
• Constructorul poate fi de asemenea invocat folosind o variabilă tip pointer la o clasă.
Chemând distrugătorii
Distructorii sunt chemați exact la fel ca majoritatea celorlalte metode ale clasei - prin intermediul exemplului său activ.
Sintaxa pentru a apela constructorul este:
Comentarii:
• După apelarea distrugătorului, obiectul devine indisponibil. Se recomandă atribuirea valorii Nilului obiectului imediat după distrugerea acestuia, astfel încât în viitor să fie posibilă verificarea existenței acestuia.
• Nu apelați distrugătorii direct. Apelarea metodei gratuite moștenite de la TObject.Free compară indicatorul instanței cu valoarea Nil înainte de a apela Distruge.
Provocările designerilor și distrugătorilor componentelor vizuale Delphi. Orice componentă care intră în aplicația dvs. în timpul designului vizual este inclusă într-o anumită ierarhie de obiecte, care se închide pe formular (clasa TFonn). Prin urmare, apelul către constructori și destructori ai tuturor componentelor de formă se efectuează automat atunci când formularul este inițializat și șters, invizibil pentru programator.
Formularele în sine sunt create și distruse de aplicație - un obiect global numit Aplicație. În fișierul proiectului cu extensia * .Dpr, puteți vedea apelul către constructorul de form ca șir:
Application.CreateForm (TForml, Fonnl);
Crearea dinamică a obiectelor. Utilizatorul poate crea un obiect și programabil prin:
Var mem: TMemo;
începe
Mem: = TMemo.Create (Sine); // Creați o instanță a clasei TMemo
Mem.Parent: = Self; // Formularul 1 nu este necesar
Mem.Name:='TmpMem '; // Alocarea unui nume unei componente
FindComponent ("TmpMem"). // Ștergeți componenta