Hvordan skape og ødelegge gjenstander

C ++ har programvareutviklere to filosofier for å skape og ødelegge gjenstander - statiske og dynamiske. I restriktive programmer gjenstander bør oppbevares i bunken minne. Stack eller statisk minne er effektiv og minnehåndtering gjøres automatisk av kompilatoren. I brukerstyrte programmer gjenstander bør oppbevares i heap minne. Heap eller dynamisk minne, selv om tregere, er fullt håndterlig av programmerer. Det er området av valget for lagring av data i komplekse applikasjoner der programflyten er diktert av brukeren.

Bruksanvisning

Variabler i Stack minne

1 Angi datatype for å lage og gi den en variabel navn og et nummer. De nærmeste klammeparentes definere variabelen omfang. Hvis det er erklært utenfor noen bukseseler så omfanget er globale for den filen. I følgende eksempel, 10 minnesteder av typen "int" er avsatt i bunken. Eksempel: "int arr [10] = {0};"

2 Behandle variabel.

3 Gjør ingenting for å ødelegge den variable objektet. Dette vil skje automatisk av kompilatoren når programmet kjøres skritt ut av denne variabelen omfang.

Variabler i Heap minne

4 Bruk operatør "nye" til å angi datatype for å lage og et nummer. I eksempel 1, har 10 minneplasser for type "int" er skapt i heap minne. Koden er lovlig, men umulig å bruke fordi ingen etikett eller variabel navn har blitt tildelt dem. Eksempel 2 viser riktig deklarasjon. Eksempel 1: "new int [10];" Eksempel 2: "int * arr = new int [10];"

5 Behandle variabel.

6 Skriv en linje med kode med operatøren "delete" for å frigjøre allokert minne og likestille variabelnavnet til NULL. Eksempel: "delete [] arr, arr = NULL;"

Hint

  • Ikke angi et tall skaper en variabel i enten stabel eller haug.
  • Bruk smarte tips eller andre søppelrydding mekanismer for å sikre riktig søppelrydding i dynamisk minne.
  • Bruk "delete" på det opprinnelige objektet variable eneste navn. Du kan bruke pekervariabler til også å peke på at minnestedet. Ikke bruk "delete" på disse.
  • Ikke bruk "delete" med mindre du er sikker på at det opprinnelige objektet variabelnavnet er ikke null. Bruk følgende kode for å sjekke. "If (! Arr = NULL) {delete [] arr;}"