Sobes.tech
Junior — Middle

Kādi ir atšķirības starp standarta neapvalkotu norādi un gudro norādi std::unique_ptr C++?

sobes.tech AI

Atbilde no AI

Galvenās atšķirības starp standarta neapstrādātu rādītāju (raw pointer) un inteliģento rādītāju std::unique_ptr C++:

  • Objekta dzīves cikla pārvaldība:

    • Raw pointer vienkārši glabā adresi, bet ne pārvalda objekta dzīves ciklu. Nepieciešams manuāli izsaukt delete.
    • std::unique_ptr automātiski izdzēš objektu, kad tas iziet no apgabala, novēršot atmiņas noplūdi.
  • Īpašumtiesības:

    • Raw pointer nepieder objektam, to var brīvi kopēt un pārsūtīt.
    • std::unique_ptr pieder objektam ekskluzīvi, kopēšana ir aizliegta, to var tikai pārvietot.
  • Drošība:

    • Raw pointer var novest pie kļūdām, ja aizmirstat izdzēst objektu vai to izmantot pēc izdzēšanas.
    • std::unique_ptr palīdz izvairīties no šādām kļūdām, automātiskās pārvaldības dēļ.

Piemērs std::unique_ptr lietošanai:

#include <memory>

std::unique_ptr<int> ptr = std::make_unique<int>(42);
// ptr automātiski izdzēsīs objektu, kad tas izies no apgabala

Tādējādi std::unique_ptr atvieglo dinamiskās atmiņas pārvaldību un palielina koda drošību.