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 идоракунии хотираи динамикро осон мекунад ва бехатарии кодиҳоро баланд мебардорад.