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_ptriçin: en az bir başkashared_ptraynı nesneyi sahipse. Silme işlemi, referans sayısı sıfıra ulaşınca gerçekleşir. -
std::weak_ptriçin: nesneye sahip değildir, sadece ona referans verir, bu nedenleweak_ptryok edildiğindedeleteçağrılmaz. -
std::unique_ptriçin: gösterge devredildi veya taşındıysa ve mevcutunique_ptrnesneye 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.