Junior — Middle
Jakie są różnice między standardowym nieowijającym wskaźnikiem a inteligentnym wskaźnikiem std::unique_ptr w C++?
sobes.tech AI
Odpowiedź od AI
Główne różnice między standardowym surowym wskaźnikiem (raw pointer) a inteligentnym wskaźnikiem std::unique_ptr w C++:
-
Zarządzanie czasem życia obiektu:
- Raw pointer po prostu przechowuje adres, ale nie zarządza czasem życia obiektu. Należy ręcznie wywołać delete.
- std::unique_ptr automatycznie usuwa obiekt po wyjściu z zakresu, zapobiegając wyciekom pamięci.
-
Własność:
- Raw pointer nie posiada obiektu, może być kopiowany i przekazywany swobodnie.
- std::unique_ptr posiada obiekt wyłącznie, kopiowanie jest zabronione, można go tylko przenosić.
-
Bezpieczeństwo:
- Raw pointer może prowadzić do błędów, jeśli zapomni się usunąć obiekt lub użyje go po usunięciu.
- std::unique_ptr pomaga unikać takich błędów dzięki automatycznemu zarządzaniu.
Przykład użycia std::unique_ptr:
#include <memory>
std::unique_ptr<int> ptr = std::make_unique<int>(42);
// ptr automatycznie usunie obiekt po wyjściu z zakresu
W ten sposób std::unique_ptr ułatwia zarządzanie pamięcią dynamiczną i zwiększa bezpieczeństwo kodu.