Sobes.tech
Junior — Middle

Ի՞նչ տարբերություններ կան ստանդարտ անբաժան ցուցիչի և խելացի ցուցիչ std::unique_ptr-ի միջև C++-ում։

sobes.tech AI

Պատասխան AI-ից

Հիմնական տարբերությունները ստանդարտ անօգուտ ցուցակ (raw pointer) և խելացի ցուցակ std::unique_ptr միջև C++-ում.

  • Օբյեկտի կյանքի ժամանակի կառավարում:

    • Raw pointer պարզապես պահում է հասցեն, բայց չի կառավարում օբյեկտի կյանքի ժամանակը: Պետք է ձեռքով կանչել delete:
    • std::unique_ptr ավտոմատ կերպով ջնջում է օբյեկտը երբ դուրս է գալիս շրջանակից, կանխելով հիշողության լճացումը:
  • Սեփականություն:

    • Raw pointer չի տիրապետում օբյեկտին, կարող է ազատորեն պատճենվել և փոխանցվել:
    • std::unique_ptr միայնակ տիրապետում է օբյեկտին, պատճենումը արգելված է, միայն տեղափոխումը հնարավոր է:
  • Անվտանգություն:

    • Raw pointer կարող է հանգեցնել սխալների, եթե մոռանաք ջնջել օբյեկտը կամ օգտագործել այն ջնջելուց հետո:
    • std::unique_ptr օգնում է խուսափել այդպիսի սխալներից ավտոմատ կառավարման շնորհիվ:

Օրինակ std::unique_ptr-ի օգտագործման:

#include <memory>

std::unique_ptr<int> ptr = std::make_unique<int>(42);
// ptr ավտոմատ ջնջում է օբյեկտը երբ դուրս է գալիս շրջանակից:

Այսպիսով, std::unique_ptr-ն հեշտացնում է դինամիկ հիշողության կառավարումը և բարձրացնում է կոդի անվտանգությունը: