Sobes.tech
Middle

Akıllı göstericilerde nesne için delete operatörü çağrılmadığında ne olur?

sobes.tech yapay zeka

AI'dan gelen yanıt

Akıllı gösterge tarafından yönetilen bir nesne için delete işlemi aşağıdaki durumlarda çağrılmaz:

  • std::shared_ptr için: en az bir başka shared_ptr aynı nesneyi sahipse. Silme işlemi, referans sayısı sıfıra ulaşınca gerçekleşir.

  • std::weak_ptr için: nesneye sahip değildir, sadece ona referans verir, bu nedenle weak_ptr yok edildiğinde delete çağrılmaz.

  • std::unique_ptr için: gösterge devredildi veya taşındıysa ve mevcut unique_ptr nesneye sahip değilse.

  • Eğer akıllı gösterge özel bir deleter ile oluşturulduysa ve bu deleter delete çağrısı yapmıyorsa (örneğin, kaynağı başka bir şekilde serbest bırakıyorsa).

std::shared_ptr ile örnek:

#include <memory>
#include <iostream>

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

int main() {
    std::shared_ptr<Foo> sp1(new Foo());
    {
        std::shared_ptr<Foo> sp2 = sp1; // referans sayısı = 2
    } // sp2 yok edilir, referans sayısı = 1, delete çağrılmaz
    // delete yalnızca sp1 yok edildiğinde çağrılır
}

Burada, delete yalnızca son shared_ptr yok edildiğinde çağrılır.