Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
#include<cstdio>
#include<system_error>
#include<cstring>
structFile{
--cięcie--
};
intmain(){
{❶
Filefile("last–message.txt",true);❷
constautomessage:"Weapologizefortheinconvenience.";
fwrite(message,strlen(message),1,file.file–pointer);
}3
//Wtymmiejscupliklast_message.txtjestjużzamknięty!
{
Filefile("last–message.txt",false);4
charread–message[37]{};
fread(read–message,sizeof(read–message),1,file.file–pointer);
printf("Readlastmessage:%s\n",read–message);
}
}
Weapologizefortheinconvenience.
Listing25.ProgramwykorzystującyklasęFile
Nawiasyklamrowe❶3definiujązakres.Ponieważwewnątrztegozakre-
suznajdujesiępierwszazmiennafile,określaonczasjejżycia.Gdykonstruk-
torzakończyswojedziałanie❷,dziękiniezmiennikowiklasybędzieszjuż
wiedział,żewartośćfile.file_pointerjestpoprawna.Znającdziałaniekonstruk-
toraklasyFile,wiesz,żewartośćfile.file_pointermusibyćpoprawnaprzez
całyczasistnieniaobiektuFile.Następniezapisujeszwiadomośćzapomocą
funkcjifwrite.Niemapotrzebyjawnegowywoływaniafunkcjifclose,ponie-
ważzmiennafilewykraczapozazakres,adestruktorautomatycznieresetuje
polefile.file_pointerzaCiebie3.PonownietworzyszobiektklasyFile,ale
tymrazemwtrybiedoodczytu4.Jeślikonstruktorwykonatoprawidłowo,
będzieszwiedział,żepliklast_message.txtzostałpomyślnieotwarty,dlatego
wczytaszjegozawartośćdozmiennejread–message.Powyświetleniuwiadomo-
ściwywoływanyjestdestruktorobiektufile,awskaźnikfile.file_pointerjest
ponownieresetowany.
Czasamipotrzebowałbyśjeszczewiększejuniwersalnościzwiązanejzdy-
namicznymprzydzielaniempamięci,jednaknadalchciałbyśpolegaćnacyklu
życiaobiektuwC++,abymiećpewność,żeniepojawiąsięwyciekipamięci
lubprzypadkowonieskorzystaszzewskaźnikapojegozwolnieniu.Jestto
rolawskaźnikówinteligentnych,którezarządzającyklemżyciaobiektówdyna-
micznychzapomocąmodeluwłasności.Gdyżadenwskaźnikinteligentny
niebędziewłaścicielemobiektudynamicznego,obiekttenulegniezniszczeniu.
lviWstępdlaprogramistówC