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.