Securitate în ceea ce privește excepțiile

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

În informatică , excepția de siguranță (excepția de siguranță) denotă abordarea unui program în ceea ce privește rezistența la tratarea excepțiilor . [1] [2]

Nivele de securitate

Patru niveluri de securitate în ceea ce privește excepțiile luate în considerare în mod obișnuit sunt: [3]

  1. Siguranță fără excepție : programul nu oferă nicio garanție în cazul în care se lansează o excepție.
  2. Siguranță de excepție de bază , cunoscută și sub numele de garanție fără scurgeri : operația poate eșua cu efecte secundare , dar există o garanție că invarianții sunt păstrați și că nu apar pierderi de resurse (de ex. Scurgeri de memorie ).
  3. Siguranță excepțională puternică , cunoscută și sub numele de semantică semantică tranzacțională : operația poate eșua, dar în caz de eșec există o garanție că operația nu va avea efecte secundare. Atingerea acestui nivel de securitate are de obicei un cost suplimentar în ceea ce privește timpul de execuție și memoria, deoarece deseori necesită efectuarea unor copii suplimentare ale datelor pentru a asigura păstrarea intrărilor originale în caz de eșec.
  4. No-throw / no-fail : finalizarea operațiunii este garantată și nu se vor arunca excepții în niciun caz.

Exemplu

Luați în considerare implementarea adăugării unui element într-o operație vectorială (cum ar fi std::vector în C ++ sau ArrayList în Java). Funcția trebuie să adauge noul obiect în containerul intern, care poate necesita alocarea de memorie nouă dacă containerul nu are suficient spațiu disponibil și să actualizeze un număr de elemente. Următorul este un posibil exemplu de comportament al funcției pentru fiecare dintre cele patru niveluri de securitate în ceea ce privește excepțiile.

  1. Siguranță fără excepție : eșecul operației poate provoca prezența unui conținut corupt în vector, o valoare incorectă în contorul de elemente sau o scurgere de memorie .
  2. Siguranță de excepție de bază : în caz de defecțiune, containerul este lăsat într-o stare consecventă (de exemplu, contorul reflectă numărul real de elemente) și nu apare nicio scurgere de memorie. Cu toate acestea, noul element sau conținutul vectorial poate fi pierdut.
  3. Siguranță excepțională puternică : alocarea memoriei se efectuează inițial, iar tamponul vectorial este transferat numai dacă alocarea are succes. În caz de faliment, starea transportatorului este păstrată.
  4. No-throw / no-fail : în plus față de cazul precedent, funcția are o valoare de returnare care indică dacă operațiunea a avut succes sau dacă inserarea nu este posibilă (de exemplu, din cauza lipsei de resurse).

Notă

  1. ^ David Abrahams,Exception-Safety in Generic Components , la boost.org . Adus 29/08/2008 .
  2. ^ David Abrahams, Exception-Safety in Generic Components , în Generic Programming , Lecture Notes in Computer Science , vol. 1766, Springer , 2000, pp. 69–79, DOI : 10.1007 / 3-540-39953-4_6 , ISBN 978-3-540-41090-4 .
  3. ^ Bjarne Stroustrup , Anexa E: Standard-Library Exception Safety in "The C ++ Programming Language" , 3rd, Addison-Wesley, ISBN 0-201-88954-4 .

linkuri externe

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