Junior — Middle
Millised on erinevused tavalise mittesidetud näitaja ja nutika näitaja std::unique_ptr vahel C++-s?
sobes.tech AI
Vastus AI-lt
Põhjalikud erinevused tavalise (raw pointer) ja nutika näitaja std::unique_ptr vahel C++-s:
-
Objekti elueaaja haldamine:
- Raw pointer lihtsalt salvestab aadressi, kuid ei halda objekti elueaega. Vajadusel tuleb käsitsi kutsuda delete.
- std::unique_ptr automaatselt kustutab objekti, kui see väljub ulatusest, vältides mälu lekkimist.
-
Omand:
- Raw pointer ei omanda objekti, seda saab vabalt kopeerida ja üle anda.
- std::unique_ptr omab objekti eksklusiivselt, kopeerimine on keelatud, seda saab ainult liigutada.
-
Turvalisus:
- Raw pointer võib põhjustada vigu, kui unustate objekti kustutada või seda pärast kustutamist kasutada.
- std::unique_ptr aitab vältida selliseid vigu automaatse haldamise kaudu.
Näide std::unique_ptr kasutamisest:
#include <memory>
std::unique_ptr<int> ptr = std::make_unique<int>(42);
// ptr automaatselt kustutab objekti, kui see väljub ulatusest
Sellisel viisil lihtsustab std::unique_ptr dünaamilise mälu haldamist ja suurendab koodi turvalisust.