Destroyer (ordinador)

De la Viquipèdia, l'enciclopèdia lliure.
Saltar a la navegació Saltar a la cerca

Els destructors , en informàtica i específicament en la programació orientada a objectes , són esdeveniments particulars que s'invoquen automàticament quan l' objecte es destrueix.
Han estat concebuts per alliberar els recursos utilitzats per l'objecte, definits per la seva classe i creats pel constructor corresponent i possiblement els altres recursos assignats dinàmicament durant l'execució dels mètodes de l'objecte mateix.

Ús

En la creació del codi d’un destructor cal actuar amb especial atenció, ja que per evitar fenòmens de fuites de memòria cal assegurar-se que totes les estructures de dades alliberen correctament la memòria que utilitzen, inclosa la que possiblement utilitzen altres estructures. niat dins d'ells.

El destructor, a diferència del constructor , no pot acceptar cap tipus de paràmetre, perquè si no es crida explícitament, el compilador inserirà la trucada al destructor al final del programa. Per aquest motiu, només hi pot haver un destructor per classe, cosa que fa impossible la sobrecàrrega .

ATENCIÓ: no és obligatori que un destructor sigui declarat públic. Exemple:

 classe A { int i ;
       ~ A () {} 
públic : A ( int v ) { i = v ;} 
};

int main ( int argc , char * argv [])
{
  A * a = nova A ( 2 ); // D'acord
  // A b (1); <----- no permès perquè el destructor és privat (error C2248: 'A :: ~ A': no ​​es pot accedir al membre privat declarat a la classe 'A')
}

es compila perfectament però impedeix la creació d’instàncies a la pila d’un objecte de la classe A, però permet la seva instància al munt. No obstant això, és obvi que cal proporcionar un mètode de destrucció a l'usuari que, en aquest moment, també pot acceptar paràmetres i retornar valors. Exemple:

 classe A { int i ;
compte int estàtic ;
                ~ A () {}
públic : A ( int v ) { i = v ; comptar ++ ;}
static bool Delete ( A * a ) { if ( ! count ) return false ; comptar - ; esborrar a ; tornar cert ;}
};
int A :: count = 0 ;

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

Idiomes recollits d’escombraries

En els idiomes que proporcionen un col·lector d’escombraries , el destructor sol ser inútil, ja que els recursos ocupats per un objecte s’alliberen automàticament quan ja no hi ha cap referència al propi objecte. En aquests idiomes, en general, és possible utilitzar o definir igualment mètodes específics per obtenir el mateix efecte, en els casos en què es vulgui desactivar el col·lector de deixalles, ja que per a algunes tasques crítiques podria ser massa ineficient. Alguns exemples dels llenguatges de programació més populars per utilitzar el mecanisme de recollida d’escombraries són Java i la versió 2 d’ Objective-C .

Llenguatges de programació

C ++

A C ++, la implementació explícita del destructor sol ser necessària en la implementació de classes que gestionen recursos. Segons la regla de tres , la implementació del destructor sol anar acompanyada de la implementació d’un constructor de còpies i d’un operador d’assignació .

 classe Point
{
públic :
   Punt (); // Constructor per defecte
   ~ Punt (); // Destructor
   // ... altres mètodes ...
privat :
   int x ;
   int y ;
}

C #

Aquest llenguatge té la recollida d’escombraries fent que els destructors siguin poc utilitzats

 classe pública Point
{
   flotador privat x ;
   flotador privat y ;
   públic ~ Dot () // Destroyer
   { // ... codi aquí ...
   }
}

PHP

PHP 4

A PHP versió 4 (i anteriors) no hi havia cap destructor. Hi havia una simple gestió d'objectes amb l'ús de constructors .

PHP 5

A la versió 5, el nom de la funció ha de ser __destructor

 classe Point
{
   privat $ x ;;
   $ privat ;
   funció pública __destructor ( )
   {
        // ... codi aquí ...
   }
}

Articles relacionats

Informàtica Portal de TI : accés a les entrades de Wikipedia tractar amb ella