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