Junior — Middle
Wat zijn de verschillen tussen een standaard niet-omvattende pointer en een slimme pointer std::unique_ptr in C++?
sobes.tech AI
Antwoord van AI
De belangrijkste verschillen tussen een standaard ongewikkeld raw pointer en een slimme pointer std::unique_ptr in C++:
-
Beheer van de levensduur van het object:
- Raw pointer slaat gewoon het adres op, maar beheert de levensduur van het object niet. Je moet handmatig delete aanroepen.
- std::unique_ptr verwijdert automatisch het object bij het verlaten van de scope, waardoor geheugenlekken worden voorkomen.
-
Eigendom:
- Raw pointer bezit het object niet, kan vrij worden gekopieerd en overgedragen.
- std::unique_ptr bezit het object exclusief, kopiëren is verboden, alleen verplaatsen is toegestaan.
-
Veiligheid:
- Raw pointer kan leiden tot fouten als je vergeet het object te verwijderen of het na verwijdering te gebruiken.
- std::unique_ptr helpt dergelijke fouten te voorkomen dankzij automatische beheer.
Voorbeeld van gebruik van std::unique_ptr:
#include <memory>
std::unique_ptr<int> ptr = std::make_unique<int>(42);
// ptr verwijdert automatisch het object bij het verlaten van de scope
Op deze manier vereenvoudigt std::unique_ptr het beheer van dynamisch geheugen en verhoogt het de veiligheid van de code.