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.