Junior
C++та кандай акылдуу көрсөткүчтөр бар?
sobes.tech AI
AIден жооп
std::unique_ptr, std::shared_ptr, std::weak_ptr.
-
std::unique_ptr:- Объекттиң эксклюзивтүү ээлиги.
- Көчүрүлө албайт, бирок которулушу мүмкүн (
std::move). - Объект автоматтык түрдө жоголот, көрүү чөйрөсүнөн чыгуу же
unique_ptrжок кылуу менен. - Жеңил, шилтемелер санагычына кошумча чыгымдар жок.
#include <memory> // `unique_ptr` түзүү std::unique_ptr<int> up1(new int(10)); // ээлик кылууну которуу std::unique_ptr<int> up2 = std::move(up1); // up1 азыр nullptr // up2 объектти ээлик кылат -
std::shared_ptr:- Объектти биргелешип ээлик кылуу.
- Ресурска шилтемелер санын көзөмөлдөө үчүн эсептегичти колдонуу.
- Эң акыркы
shared_ptrжок кылынганда гана объект жоголот. - Көчүрүү жана которуу мүмкүн.
- Шилтемелер санагычына кошумча чыгымдар (адатта бөлүнүп алынады).
- Циклдик шилтемелер пайда болушу мүмкүн, бул эс тутумдун агып кетүүсүнө алып келет.
#include <memory> // `shared_ptr` түзүү std::shared_ptr<int> sp1 = std::make_shared<int>(20); // ээлик кылууну көчүрүү std::shared_ptr<int> sp2 = sp1; // шилтемелер саны өсөт // sp1 жана sp2 объектти ээлик кылат -
std::weak_ptr:- Объектти ээлик кылбайт.
- Объектти башкарган бир же бир нече
shared_ptrменен "слабую" шилтемени көрсөтөт. shared_ptrортосунда циклик шилтемелердин алдын алууга колдонулат.- Шилтемелер санагычын көбөйтпөйт.
- Объектке коопсуз кирүү үчүн
lock()методу мененshared_ptrкылып өзгөртүлүшү керек. Эгер объект алда канча жок болсо,lock()бошshared_ptrкайтарат.
#include <memory> // `shared_ptr` түзүү std::shared_ptr<int> sp = std::make_shared<int>(30); // `weak_ptr` түзүү std::weak_ptr<int> wp = sp; // Текшерүү жана колдонуу if (auto shared_from_weak = wp.lock()) { // Объектке кирүү } else { // Объект алда канча жок }