Junior — Middle
Obyektning konstruktorida istisno yuzaga kelsa, uning destruktor chaqirilishi nima bo'ladi?
sobes.tech AI
AIdan javob
Agar C++ da object konstruktorida istisno yuzaga kelsa, bu objectning destruktori chaqirilmaydi, chunki object to'liq yaratilmagan hisoblanadi.
Ammo, objectning a'zolari va asosiy sinflarining destruktorlari, ular muvaffaqiyatli qurilgan va istisno yuzaga kelishidan oldin to'liq qurilgan bo'lsa, resurslarni to'g'ri bo'shatish uchun chaqiriladi.
Misol:
class A {
public:
A() { throw std::runtime_error("Xato konstruktor" ); }
~A() { std::cout << "A destruktori" << std::endl; }
};
class B {
A a;
public:
B() { }
~B() { std::cout << "B destruktori" << std::endl; }
};
int main() {
try {
B b; // B() ichida a yaratilayotganda istisno yuzaga keladi
} catch (...) {
std::cout << "Istisno ushlanmoqda" << std::endl;
}
}
Bu misolda, B ning destruktori chaqirilmaydi, chunki B obyekti to'liq yaratilmagan, ammo A ning destruktori chaqiriladi, agar A muvaffaqiyatli qurilgan bo'lsa, istisno yuzaga kelishidan oldin.