Sobes.tech
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ą.