Junior — Middle
Aké sú rozdiely medzi štandardným neobaleným ukazovateľom a chytrým ukazovateľom std::unique_ptr v C++?
sobes.tech AI
Odpoveď od AI
Hlavné rozdiely medzi štandardným neupraveným ukazovateľom (raw pointer) a chytrým ukazovateľom std::unique_ptr v C++:
-
Správa životnosti objektu:
- Raw pointer jednoducho ukladá adresu, ale neriadi životnosť objektu. Je potrebné manuálne volať delete.
- std::unique_ptr automaticky odstráni objekt pri opustení rozsahu, čím zabraňuje únikom pamäti.
-
Vlastníctvo:
- Raw pointer nevlastní objekt, môže byť voľne kopírovaný a odovzdaný.
- std::unique_ptr vlastní objekt výlučne, kopírovanie je zakázané, je možné len presunúť.
-
Bezpečnosť:
- Raw pointer môže viesť k chybám, ak zabudnete odstrániť objekt alebo ho použijete po odstránení.
- std::unique_ptr pomáha predchádzať takýmto chybám vďaka automatickému riadeniu.
Príklad použitia std::unique_ptr:
#include <memory>
std::unique_ptr<int> ptr = std::make_unique<int>(42);
// ptr automaticky odstráni objekt pri opustení rozsahu
Týmto spôsobom uľahčuje std::unique_ptr správu dynamickej pamäte a zvyšuje bezpečnosť kódu.