Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
wyświetlawkonsolinapis"Stop,Dave."(sprawienie,byHalzaśpiewałfiDaisy
Bell”,pozostawiamczytelnikowijakoćwiczenie).
Kompilatorzapewnia,żemetodykonstruktoridestruktorsąwywoływa-
neautomatyczniedlaobiektówzestatycznym,zlokalnymokresemprzecho-
wywania,atakżezlokalnymczasemprzechowywaniuwątku.Wprzypadku
obiektówzdynamicznymokresemprzechowywaniaużywaszsłówkluczowych
newidelete,którezastępująstarszekonstrukcjemallocifree,jakpokazano
nalistingu22.
#include<cstdio>
structHal{
--cięcie--
};
intmain(){
autohal=newHal{};//Pamięćzostałaprzydzielona,anastępniezostał
wywołanykonstruktor
deletehal;
//Destruktorzostałwywołany,anastępniezostała
zwolnionapamięć
}
Iimcompletelyoperational.
Stop,Dave.
Listing22.ProgramtworzącyiusuwającyobiektklasyHal
Jeśli(zjakiegokolwiekpowodu)konstruktorniejestwstanieukończyć
działania,zazwyczajzgłaszawyjątek.JakoprogramistaCmogłeśjużmiećdo
czynieniazwyjątkamipodczasprogramowaniazużyciemniektórychinter-
fejsówAPIsystemuoperacyjnego(naprzykładWindowsStructuredExcep-
tionHandling).Pozgłoszeniuwyjątkustosjestrozwijany,dopókiniezostanie
znalezionymodułobsługiwyjątków.Wtymmomencieprogramodzyskuje
kontrolęnadswoimdziałaniem.Rozsądneużyciewyjątkówmożeuprościć
kod,ponieważsprawdzaniewarunkówbłędówmożnawykonywaćjedynie
wówczas,gdymatosens.C++obsługujewyjątkinapoziomiejęzykowym,
coilustrujelisting23.
#include<exception>
try{
//Pewienkod,którymógłbyzgłosićwyjątekstd::exception❶
}catch(conststd::exception&e){
//Wtymmiejscuprogramzaczynakontynuowaćswojedziałanie❷
}
Listing23.Bloktry-catch
Kod,którymożezgłosićwyjątek,powinnosięumieścićwblokuznajdują-
cymsięzarazpoinstrukcjitry❶.Jeśliwktórymkolwiekmomenciezostanie
zgłoszonywyjątek,stossięrozwinie(łaskawieniszczącwszelkieobiekty,które
livWstępdlaprogramistówC