Sobes.tech
Junior — Middle

Jaké jsou rozdíly mezi standardním neobaleným ukazatelem a chytrým ukazatelem std::unique_ptr v C++?

sobes.tech AI

Odpověď od AI

Hlavní rozdíly mezi standardním neupraveným ukazatelem (raw pointer) a chytrým ukazatelem std::unique_ptr v C++:

  • Správa životnosti objektu:

    • Raw pointer pouze ukládá adresu, ale nespravuje životnost objektu. Je nutné ručně volat delete.
    • std::unique_ptr automaticky odstraní objekt při opuštění rozsahu, čímž předchází únikům paměti.
  • Vlastnictví:

    • Raw pointer nevlastní objekt, může být volně kopírován a předáván.
    • std::unique_ptr vlastní objekt výlučně, kopírování je zakázáno, lze pouze přesunout.
  • Bezpečnost:

    • Raw pointer může vést k chybám, pokud zapomenete odstranit objekt nebo jej použijete po odstranění.
    • std::unique_ptr pomáhá těmto chybám předcházet díky automatické správě.

Příklad použití std::unique_ptr:

#include <memory>

std::unique_ptr<int> ptr = std::make_unique<int>(42);
// ptr automaticky odstraní objekt při opuštění rozsahu

Tímto způsobem usnadňuje std::unique_ptr správu dynamické paměti a zvyšuje bezpečnost kódu.