Мазмунга өтүү

RAII жана ресурстарды башкаруу

Сабактын башталышы

RAII жана ресурстарды башкаруу

Ар бир ресурсту объекттин жашоо мөөнөтүнө байлаңыз

Негизги идея: RAII дегенибиз Resource Acquisition Is Initialization — «ресурсту алуу — бул инициализация». Аты кыйын, бирок идеясы кооз: объект ресурсту (эстутум, файл, кулпу, сокет) алганда, аны конструкторунда алат жана деструкторунда кайтарат. C++ объект көрүнүү аймагынан чыкканда деструктор иштээрин кепилдегендиктен, тазалоо автоматтык жана өзгөчө жагдайларда коопсуз болот.
Сабактын аягында сиз төмөнкүлөрдү жасай аласыз:
  • ресурс деген эмне жана эмне үчүн агып кетүү болорун түшүндүрө аласыз,
  • ресурсту конструктор жана деструктор аркылуу объектке байлай аласыз,
  • үчтүн эрежесин жана бештин эрежесин колдоно аласыз,
  • акылдуу көрсөткүчтөр жана контейнерлер менен нөлдүн эрежесин колдоно аласыз.

1. Ресурс деген эмне жана эмне үчүн агып кетүү болот?

Ресурс — бул программаңыз системадан алып, акырында кайтарууга милдеттүү болгон бардык нерсе: new аркылуу үймөктөн алынган эстутум, ачык файл дескриптору, тармак сокети, маалымат базасынын байланышы, мьютекс кулпусу. Схема ар дайым бирдей: алуу, колдонуу, андан кийин бошотуу. Бошотууну унутсаңыз, агып кетүү пайда болот — ресурсту эч ким колдонбосо да, ал ээленген бойдон калат.

Кол менен тазалоо оңой сыяктуу көрүнөт, чыныгы код тоскоол болгонго чейин:

void process() {
    int* data = new int[1000];   // алуу
    if (!load(data)) {
        return;                  // АГЫП КЕТҮҮ: бул жолдо delete[] унутулду
    }
    compute(data);
    delete[] data;               // бошотуу (бир гана ийгиликтүү жолдо)
}

Эрте return delete[] дегенди өткөрүп жиберет. Андан да жаманы, эгерде compute() өзгөчө жагдай ыргытса, delete[] сабы такыр аткарылбайт. Ар бир тармак, ар бир өзгөчө жагдай, ар бир келечектеги оңдоо — агып кетүүнүн мүмкүнчүлүгү. RAII адамды бул чынжырдан алып салат.

Негизги ой: тазалоо сиз жазууну эстеп калуучу инструкция болбошу керек; ал объекттин жок кылынышынын натыйжасы болушу керек.

Бул сабакты YourAIZone платформасында улантыңыз

Толук сабакта — толук түшүндүрмө, чыгарылган мисалдар, көп кездешкен каталар, заматта текшерилүүчү тесттер жана ЖИ-репетитор. Конок катары дароо баштаңыз же прогрессти сактоо үчүн аккаунт түзүңүз.

Толук сабакта

  • Толук түшүндүрмө
  • Чыгарылган мисалдар
  • Көп кездешкен каталар жана алардан кантип качуу керек
  • Тест суроолору: 15
  • Тема боюнча суроолорго жооп берген ЖИ-репетитор
  • Окуучу, ата-эне жана мугалим үчүн прогрессти көзөмөлдөө