Sobes.tech
Junior — Middle

C++та стандарттык эмес капталган көрсөткүч жана акылдуу көрсөткүч std::unique_ptr ортосунда кандай айырмачылыктар бар?

sobes.tech AI

AIден жооп

C++да стандарттык жекелештирилген көрсөткүч (raw pointer) жана акылдуу көрсөткүч std::unique_ptr ортосундагы негизги айырмачылыктар:

  • Объекттин жашоо мөөнөтүн башкаруу:

    • 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 динамикалык эс тутумду башкарууну жеңилдетет жана коддун коопсуздугун жогорулатат.