Sobes.tech
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.