c + + dynamiske hukommelse

, en god forståelse af, hvor dynamisk hukommelse virker i c + + er afgørende for at blive en god c + + programmør.hukommelse i din c + + - programmet er opdelt i to dele:,,,,,,, stak:, alle variabler erklærede i funktion vil tage hukommelse fra skorsten.,,,,,,,, det er medtaget: uudnyttede hukommelse af programmet og kan bruges til at tildele den hukommelse, dynamisk, når programmet løber.,, mange gange, er du ikke klar over, hvor meget du vil huske på forhånd er nødvendigt at opbevare visse oplysninger i et defineret variable, og størrelsen af de nødvendige hukommelse kan fastlægges på løbe tid. du kan tildele hukommelse på løbe tid i bunken til variabel for en given type ved hjælp af en særlig operatør i c + + der kommer en adresse på den plads, der er afsat.denne operatør kaldes, ny operatør. hvis du ikke har behov for dynamisk tildelt hukommelse mere, du kan bruge, slette, operatør, som de tildeler hukommelse tidligere tildelt nye erhvervsdrivende. de nye og slette virksomheder: er der følgende generiske syntaks for at anvende nye erhvervsdrivende til at tildele hukommelse dynamisk for en datatype, nye data type; her datatype, kunne være en indbygget datatype, herunder et system eller en bruger fastlagte datatyper omfatter klasse eller struktur.lad os begynde med indbygget datatyper.for eksempel kan vi definere en indikator for type dobbelt, og derefter anmode om, at minde tildeles til gennemførelsestid.vi kan gøre dette ved hjælp af den nye operatør med følgende erklæringer: dobbelt * pvalue = ugyldig; //pointer indledes med for pvalue = nye dobbelt; //anmodning hukommelse for variablen, hukommelsen kan ikke har været anvendt med succes, hvis den frie butik var brugt op.det er god praksis for at kontrollere, om nye erhvervsdrivende returnerer ugyldig pointer, og træffe passende foranstaltninger, som nedenfor: dobbelt * pvalue = ugyldig; hvis (!(pvalue = nye dobbelt)) (cout < < "fejl: af hukommelse." < < endl., udgang (1)), malloc(), funktion fra c, findes stadig i c + +, men det anbefales at undgå at anvende malloc() funktion.den største fordel af nye over malloc() er det nyt ikke bare afsætte hukommelse, konstruktioner, genstande, der er primære formål c + +. på ethvert punkt, når du føler en variabel, der er dynamisk, der ikke længere kræves, kan du frigøre hukommelse, at den indtager i den frie butik med slette operatør som følger:, slette pvalue; //frigivelse hukommelse påpeges af pvalue, lad os lægge ovennævnte begreber og form følgende eksempel viser, hvor nye og slette arbejde:,&#omfatter < iostream > anvendelse af namespace std; int vigtigste () (- * pvalue = ugyldig; //point i brug med den pvalue = nye dobbelt; //anmodning hukommelse for variablen * pvalue = 29494.99; //lagre værdien på tildelt adresse cout << "værdi af pvalue:" < < * pvalue < < endl., slette pvalue; //frigøre hukommelse.tilbage, 0;}, hvis vi samler og løber over kode, vil det føre til følgende resultat: værdien af pvalue: 29495, dynamisk hukommelse tildeling til arrays:, at du ønsker at afsætte hukommelse for en række personer, dvs. serie af 20 tegn.med samme syntaks, hvad vi har brugt over vi kan afsætte hukommelse dynamisk som vist nedenfor. - * pvalue = ugyldig; //pointer indledes med for pvalue = nye char [20]; //anmodning hukommelse for variablen, at fjerne det system, som vi har lige skabt erklæring ville se sådan ud: slette [] pvalue; //slette array påpeges af pvalue efter lignende generiske syntaks for nye erhvervsdrivende, kan du allocat for en flerdimensional system som følger: dobbelt * * pvalue = ugyldig; //pointer indledes med for pvalue = nye dobbelt [3], [4]; //tildele hukommelse til 3x4 system imidlertid, at frigive hukommelse for flerdimensionale syntaks system vil stadig være det samme som ovenfor:, slette [] pvalue; //slette array poi), som pvalue, dynamisk hukommelse tildeling for genstande, som ikke adskiller sig fra simple datatyper.f.eks. overveje følgende kode, hvor vi kommer til at bruge en række ting for at klarlægge begrebet:,&#omfatter < iostream > anvendelse af namespace std. klasse rubrik (offentlige: box() {cout < < "konstruktøren hedder!"< < endl.;} § box() {cout < < "destructor."< < endl.;}}; int vigtigste () (rubrik * myboxarray = nye rubrik [4] ikke [...] myboxarray; //slette array tilbage 0}, hvis du var til at tildele en vifte af fire kasse genstande, de simple konstruktøren ville blive ringet fire gange, og ligeledes at fjerne disse genstande, giver også vil blive kaldt samme antal gange. hvis vi udarbejder og løbe over kode, vil det føre til følgende resultat:, konstruktøren hedder!konstruktøren hedder!konstruktøren hedder!konstruktøren hedder!- ødelægger ringede!- ødelægger ringede!- ødelægger ringede!- ødelægger ringede!,



Previous:
Next Page: