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