Sobes.tech
Middle

Ağıllı göstəricilərdə obyekt üçün delete operatoru çağırılmadıqda nə baş verir?

sobes.tech Süni İntellekt

AI-dan cavab

Ağıllı göstərici ilə idarə olunan obyekt üçün delete əməliyyatı aşağıdakı hallarda çağrılmayacaq:

  • std::shared_ptr üçün: ən azı başqa bir shared_ptr həmin obyektə sahibdirsə. Silmə yalnız referans sayısı sıfıra çatdıqda baş verir.

  • std::weak_ptr üçün: obyektə sahib deyil, sadəcə ona istinad edir, ona görə də weak_ptr-in məhvi zamanı delete çağrılmır.

  • std::unique_ptr üçün: göstərici ötürülmüş və ya köçürülmüşdürsə və cari unique_ptr obyektə sahib deyil.

  • Əgər ağıllı göstərici xüsusi bir deleter ilə yaradılıbsa və bu deleter delete-i çağırmırsa (məsələn, resursu başqa üsulla azad edir).

std::shared_ptr nümunəsi:

#include <memory>
#include <iostream>

struct Foo {
    ~Foo() { std::cout << "Foo silindi\n"; }
};

int main() {
    std::shared_ptr<Foo> sp1(new Foo());
    {
        std::shared_ptr<Foo> sp2 = sp1; // istinad sayı = 2
    } // sp2 silinir, istinad sayı = 1, delete çağrılmır
    // delete yalnız sp1 də silindikdən sonra çağırılır
}

Burada, delete yalnız son shared_ptr silindikdən sonra çağrılır.