Sobes.tech
Junior — Middle
132

Ақылды көрсеткіштердің жұмыс принципін және олар қалай жадыны басқаратынын түсіндіре аласыз ба?

Сұралған компаниялар
Датаджайл

AI-дан жауап

sobes.tech AI

Ақылды көрсеткіштер — бұл әдеттегі көрсеткіштер үстіне оралатын объектілер, олар динамикалық бөлінген жадтың өмір сүру уақытын автоматты түрде басқарады, бұл ұрлықтар мен екі рет босатудың қателіктерін болдырмайды.

C++-тағы негізгі ақылды көрсеткіштер түрлері:

  • std::unique_ptr — объектіні эксклюзивті иеленеді, көшіруге рұқсат бермейді, тек орын ауыстыруға мүмкіндік береді. Ақылды көрсеткіш жойылғанда, жад босатылады.
  • std::shared_ptr — сілтемелер санын есептейді. Соңғы shared_ptr объектіні көрсеткен кезде, жад босатылады.
  • std::weak_ptrshared_ptr басқарған объектке әлсіз сілтеме, объектінің өмір сүру уақытын әсер етпейді, циклдік сілтемелерді болдырмау үшін пайдаланылады.

std::shared_ptr қолдану мысалы:

#include <memory>
#include <iostream>

struct Foo {
    Foo() { std::cout << "Foo жасалды\n"; }
    ~Foo() { std::cout << "Foo жойылды\n"; }
};

int main() {
    std::shared_ptr<Foo> sp1 = std::make_shared<Foo>();
    {
        std::shared_ptr<Foo> sp2 = sp1; // сілтемелер саны артады
        std::cout << "Блок ішінде\n";
    } // sp2 жойылады, сілтемелер саны азаяды
    std::cout << "Блок сыртында\n";
} // sp1 жойылады, Foo объекті жойылады

Осылайша, ақылды көрсеткіштер жадты қауіпсіз басқаруға көмектеседі, delete шақыруын қажет етпей.