U C ++, koja je razlika između čvora deklaracije * temp i čvora * temp = novi čvor gdje je čvor struktura koja sadrži dva elementa podataka i sljedeći?


Odgovor 1:

Pretpostavljam da su ove dvije deklaracije za lokalne ili statičke varijable. Prvi samo deklarira varijablu koja se zove „temp“ čiji je tip „pokazivač na čvor“, ali je ne inicijalizira. Druga deklarira istu varijablu, ali inicijalizira je s pokazivačem na strukturu čvora dodijeljenu na hrpi.

Uvijek je poželjno inicijalizirati varijable nego ih ostaviti neinicijaliziranim. Čak i kada ćete varijablu postaviti negdje drugdje u kodu, obično je najbolje da je barem podesite na nulu u deklaraciji (čvor * temp = nullptr) jer to olakšava uklanjanje pogrešaka.


Odgovor 2:

čvor * temp; čini inicijalizirani pointer na čvor. U neko doba mu možete dodijeliti adresu čvora. Taj čvor bi morao već postojati. Možete pustiti pokazivač izvan područja bez propuštanja čvora, jer očito postoji odvojeno od pokazivača.

čvor * temp = novi čvor; raspoređuje memoriju za i poziva konstruktora da inicijalizira novi objekt čvora. Jedina referenca na taj čvor je pokazivač. Ako pokazivač izađe izvan okvira, čvor će procuriti, to jest da i dalje postoji, i dalje će zauzeti memoriju, ali nije dostupan ni na koji način. Prije nego što pokazivač izađe iz okvira, trebali biste izbrisati čvor na koji ukazuje, kako biste to izbjegli.

Sljedeća tema: pametni pokazivači. C ++ 11 i više ih ima na jeziku. Prije toga bilo je prilično lako prebaciti svoje. Pametni pokazivač objekt je klase s konstruktorom i destruktorom. Kad pametni pokazivač izađe iz dosega, poziva se njegov destruktor i destruktor briše stvar koju pointer posjeduje. Čak i ako kôd izlazi jer je to izuzeta, pametni pokazivači sprječavaju curenje.