Junior — Middle
Obyektin konstruktorunda istisna baş verərsə, onun destruktorunun çağırışı nə olacaq?
sobes.tech Süni İntellekt
AI-dan cavab
Əgər C++-də obyektin konstruktorunda istisna baş verərsə, bu obyektin destruktoru çağrılmır, çünki obyekt tam yaradılmamış sayılır.
Lakin, obyektin artıq tam yaradılmış üzvlərinin və əsas siniflərin destruktorları, onlar uğurla qurulmuş və istisna baş vermədən əvvəl qurulmuşsa, resursları düzgün şəkildə azad etmək üçün çağrılacaq.
Nümunə:
class A {
public:
A() { throw std::runtime_error("Xəta konstruktor" ); }
~A() { std::cout << "A destruktoru" << std::endl; }
};
class B {
A a;
public:
B() { }
~B() { std::cout << "B destruktoru" << std::endl; }
};
int main() {
try {
B b; // B() içində a yaradılarkən istisna atılır
} catch (...) {
std::cout << "İstisna tutuldu" << std::endl;
}
}
Bu nümunədə, B-nin destruktoru çağrılmayacaq, çünki B obyekti tam yaradılmayıb, amma A-nın destruktoru çağrılacaq, əgər A uğurla qurulubsa, istisna baş vermədən əvvəl.