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 birshared_ptrhə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ə cariunique_ptrobyektə 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.