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

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

Акылдуу көрсөткүчтөр

Үймөктөгү объекттер үчүн автоматтык, өзгөчө кырдаалга туруктуу ээлик

Негизги идея: Акылдуу көрсөткүч - бул үймөктө бөлүнгөн эстутумга ээлик кылган жана ээлик аяктаган учурда аны автоматтык түрдө бошотуучу стектеги кичинекей объект. Ар бир new үчүн өз колуң менен delete дал келтирүүнүн ордуна, буну көрсөткүчтүн деструкторуна жасатасың. Бул эстутумга колдонулган RAII (Resource Acquisition Is Initialization): ресурстун жашоо мөөнөтү стектеги объекттин жашоо мөөнөтүнө байланган.
Аягында сиз төмөнкүлөрдү жасай аласыз:
  • жылаңач new/delete эмне үчүн ишенимсиз экенин түшүндүрүү,
  • жеке ээлик үчүн std::unique_ptr колдонуу жана аны жылдыруу,
  • биргелешкен ээлик үчүн std::shared_ptr колдонуу жана анын шилтемелер эсептегичин окуу,
  • ээлик кылбай байкоо жүргүзүү жана шилтеме циклдерин үзүү үчүн std::weak_ptr колдонуу.

1. Жылаңач new / delete көйгөйү

Сиз new менен үймөктө эстутум бөлүүнү жана delete менен аны бошотууну билесиз. Кыйынчылык - delete үчүн сиз жооптусуз, жана катачылык кетирүүнүн көп жолу бар:

  • Агып кетүү (leak): delete унутуп калдыңыз, же эрте return аны өткөрүп жиберди, эстутум эч качан кайтпайт.
  • Илинген көрсөткүч: delete кылдыңыз, бирок көрсөткүчтү колдоно бересиз.
  • Кош бошотуу: эки код бутагы бир эле объектти delete кылат.
  • Өзгөчө кырдаалдагы агуу: new менен delete ортосунда өзгөчө кырдаал (exception) ыргытылат, ошондуктан delete аткарылбайт.
void process() {
    Widget* w = new Widget();   // кол менен бөлүү
    if (!w->load())
        return;                 // КАТА: w агып кетет, delete аткарылбайт
    w->run();
    delete w;                   // унутуу оңой, же exception себеп өткөрүп жиберилет
}

Акылдуу көрсөткүчтөр тазалоону компиляторго жана деструкторго жүктөп, ушул катачылыктардын бүтүндөй классын жоёт. Акылдуу көрсөткүч стектеги объект болгондуктан, анын деструктору көрүнүү аймагынын аягында, ар кандай жол менен, анын ичинде exception стекти чечкенде да автоматтык түрдө аткарылат.

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

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

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

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