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-ն հեշտացնում է դինամիկ հիշողության կառավարումը և բարձրացնում է կոդի անվտանգությունը: