Regula celor trei (C ++)

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

Regula celor trei este o regulă de programare C ++ pentru implementarea metodelor încorporate ale unei clase destinate gestionării resurselor. Formulat inițial de Marshall Cline în 1991 [1] , acesta afirmă că, dacă clasa definește în mod explicit cel puțin unul dintre distructori , constructori de copii și operatori de atribuire , atunci toate cele trei metode trebuie definite în mod explicit. [2]

C ++ 11 introduce semantica mișcării, prin care un obiect poate intra în posesia resurselor de obiecte temporare, motiv pentru care regula celor trei reguli este extinsă la cinci cu adăugarea constructorului de deplasare (constructor de mișcare) și dell ' de atribuire a schimbării operator (mutare atribuire oeprator). [3]

Motivație

Cele trei funcții din regulă sunt funcții speciale ale membrilor și, dacă nu sunt definite în mod explicit, compilatorul își generează automat implementarea implicită cu următorul comportament: [4]

  • destructor: numește distructorul tuturor membrilor care sunt instanțe ale unei clase;
  • constructor copie: construiește toți membrii obiectului care sunt instanțe ale unei clase, apelând constructorul relativ al copiei și efectuează o atribuire pentru toți membrii care sunt instanțe de tip elementar;
  • operator de atribuire: similar cu constructorul de copiere, invocă operatorul de atribuire pentru toți membrii care sunt instanțe ale unei clase și efectuează o atribuire pentru toți membrii de tipuri elementare.

Rațiunea pentru regulă decurge din faptul că implementarea explicită a uneia dintre aceste funcții este de obicei necesară dacă o clasă gestionează o resursă care necesită alocare sau dislocare non-trivială (de exemplu, un pointer către o porțiune de memorie alocată dinamic , un socket , o descriptor de fișiere etc.) și, în acest caz, este probabil necesar să implementați celelalte două pentru a asigura transferul sau duplicarea corectă a resursei în toate cazurile. [5]

Notă

  1. ^ Andrew Koenig și Barbara E. Moo, C ++ Made Easier: The Rule of Three , în Jurnalul Dr. Dobb , 1 iunie 2001. Accesat la 8 septembrie 2009 .
  2. ^ Bjarne Stroustrup , Limbajul de programare C ++ , ediția a III-a, Addison-Wesley, 2000, pp. 283 -4, ISBN 978-0-201-70073-2 .
  3. ^ Bjarne Stroustrup , C ++ 11 - noul standard ISO C ++ , la stroustrup.com , 7 aprilie 2013. Accesat la 10 mai 2013 .
  4. ^ Limbajul de programare C ++ , p. 271.
  5. ^ Bjorn Karlsson și Matthew Wilson, Legea celor doi mari , în Sursa C ++ , Artima, 1 octombrie 2004. Accesat la 22 ianuarie 2008 .
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT