Destroyer (computer)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Distructorii , în informatică și în special în programarea orientată pe obiecte , sunt evenimente particulare care sunt invocate automat atunci când obiectul este distrus.
Ele au fost concepute pentru a elibera resursele utilizate de obiect, definite de clasa lor și create de constructorul corespunzător și, eventual, celelalte resurse alocate dinamic în timpul execuției metodelor obiectului în sine.

Utilizare

În crearea codului unui destructor este necesar să acționăm cu o atenție deosebită, deoarece pentru a evita fenomenele de scurgere a memoriei este necesar să fim siguri că toate structurile de date eliberează corect memoria folosită de acestea, inclusiv cea posibil utilizată de alte structuri cuibărit în interiorul lor.

Distructorul, spre deosebire de constructor , nu poate accepta niciun tip de parametru, deoarece dacă nu este apelat în mod explicit, compilatorul va insera apelul către destructor la sfârșitul programului. Din acest motiv, poate exista un singur destructor pe clasă, ceea ce face imposibilă supraîncărcarea .

ATENȚIE: nu este obligatoriu ca un destructor să fie declarat public! Exemplu:

 clasa A { int i ;
       ~ A () {} 
public : A ( int v ) { i = v ;} 
};

int main ( int argc , char * argv [])
{
  A * a = nou A ( 2 ); // Bine
  // A b (1); <----- nu este permis deoarece destructorul este privat (eroare C2248: 'A :: ~ A': nu poate accesa membru privat declarat în clasa 'A')
}

compilează perfect, dar împiedică instanțierea unui obiect din clasa A pe stivă, dar permite instanțarea acestuia în grămadă. Cu toate acestea, este evident că o metodă de distrugere trebuie să fie furnizată utilizatorului care, în acest moment, poate accepta și parametri și valori de returnare. Exemplu:

 clasa A { int i ;
număr int static ;
                ~ A () {}
public : A ( int v ) { i = v ; numără ++ ;}
static bool Delete ( A * a ) { if ( ! count ) return false ; numar - ; șterge un ; returnează adevărat ;}
};
int A :: count = 0 ;

int main ( int argc , char * argv [])
{
  A * a = nou A ( 2 );
  bool b = A :: Delete ( a ); // b = 1
  b = A :: Delete ( a ); // b = 0
}

Limbi colectate de gunoi

În limbile care furnizează un colector de gunoi , distructorul este adesea inutil, deoarece resursele ocupate de un obiect sunt eliberate automat atunci când nu mai există nicio referire la obiectul în sine. În aceste limbi, în general, este posibil să utilizați sau să definiți în mod egal metode specifice pentru a obține același efect, în cazurile în care doriți să dezactivați colectorul de gunoi, deoarece pentru unele sarcini critice ar putea fi prea ineficient. Exemple dintre cele mai populare limbaje de programare pentru a utiliza mecanismul de colectare a gunoiului sunt Java și versiunea 2 a Objective-C .

Limbaje de programare

C ++

În C ++, implementarea explicită a destructorului este de obicei necesară în implementarea claselor care gestionează resursele. Conform regulii de trei , implementarea destructorului este însoțită de obicei de implementarea unui constructor de copiere și a unui operator de atribuire .

 clasa Punct
{
public :
   Punct (); // Constructor implicit
   ~ Punct (); // Distrugător
   // ... alte metode ...
privat :
   int x ;
   int y ;
}

C #

Acest limbaj are colectarea gunoiului, făcând destructorii puțin folosiți

 public class Point
{
   plutitor privat x ;
   plutitor privat y ;
   public ~ Dot () // Destroyer
   { // ... cod aici ...
   }
}

PHP

PHP 4

În versiunea PHP 4 (și versiunile anterioare) nu a existat niciun destructor. A existat o simplă gestionare a obiectelor cu utilizarea constructorilor .

PHP 5

În versiunea 5 numele funcției trebuie să fie __destructor

 clasa Punct
{
   privat $ x ;;
   privat $ y ;
   funcție publică __destructor ( )
   {
        // ... cod aici ...
   }
}

Elemente conexe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT