I C ++, hva er forskjellen mellom deklarasjoner node * temp og node * temp = ny node der node er en struktur som inneholder 2 elementdata og neste?


Svar 1:

Jeg vil anta at disse to deklarasjonene er for lokale eller statiske variabler. Den første deklarerer bare en variabel som heter “temp” hvis type er “peker til node”, men initialiserer den ikke. Den andre deklarerer den samme variabelen, men initialiserer den med en peker til en nodestruktur som er tildelt på haugen.

Det er alltid å foretrekke å initialisere variabler enn å la dem være uinitialiserte. Selv når du skal angi variabelen et annet sted i koden, er det vanligvis best å i det minste stille den til null i erklæringen (node ​​* temp = nullptr) da det gjør avlusing enklere.


Svar 2:

node * temp; lager en initialisert peker til node. På et fremtidig tidspunkt kan du tilordne adressen til en node til den. Den noden måtte allerede eksistere. Du kan la pekeren gå ut av omfanget uten å lekke noden, fordi det tydeligvis eksisterer atskilt fra pekeren.

node * temp = ny node; tildeler minne for og ringer konstruktøren til å initialisere et nytt nodeobjekt. Den eneste referansen til den noden er pekeren. Hvis pekeren går ut av omfanget, vil noden lekke, det vil si at den fortsatt eksisterer, som fortsatt opptar minne, men den er ikke tilgjengelig på noen måte. Før pekeren går ut av omfanget, bør du slette noden den peker på, for å unngå det.

Neste emne: smarte pekere. C ++ 11 og høyere har dem på språket. Før det var det ganske enkelt å rulle din egen. En smart peker er et objekt av en klasse med en konstruktør og en ødelegger. Når smartpekeren går utenfor omfanget, kalles destruktoren sin, og ødeleggeren sletter det som pekeren eier. Selv om koden kommer ut fordi det ble kastet et unntak dette skjer, forhindrer smarte pekere lekkasjer.