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