Junior — Middle
Kokios yra skirtumai tarp standartinio neapgaubto rodyklės ir išmaniosios rodyklės std::unique_ptr C++?
sobes.tech AI
Atsakymas iš AI
Pagrindiniai skirtumai tarp standartinio neapdoroto rodyklės (raw pointer) ir išmaniosios rodyklės std::unique_ptr C++:
-
Objekto gyvavimo laiko valdymas:
- Raw pointer paprasčiausiai saugo adresą, bet nevaldo objekto gyvavimo laiko. Reikia rankiniu būdu iškviesti delete.
- std::unique_ptr automatiškai ištrina objektą, kai išeina iš apimties, užkertant kelią atminties nutekėjimui.
-
Nuosavybė:
- Raw pointer nevaldo objekto, gali būti laisvai kopijuojamas ir perduodamas.
- std::unique_ptr turi išskirtinę nuosavybę, kopijavimas draudžiamas, galima tik perkelti.
-
Saugumas:
- Raw pointer gali sukelti klaidų, jei pamiršote ištrinti objektą arba jį naudoti po ištrynimo.
- std::unique_ptr padeda išvengti tokių klaidų automatinio valdymo dėka.
Pavyzdys naudojant std::unique_ptr:
#include <memory>
std::unique_ptr<int> ptr = std::make_unique<int>(42);
// ptr automatiškai ištrina objektą, kai išeina iš apimties
Taip std::unique_ptr palengvina dinaminės atminties valdymą ir didina kodo saugumą.