Junior — Middle
Эгер объекттин куруучусунда катачылык болсо, анын деструкторун чакырууга эмне болот?
sobes.tech AI
AIден жооп
Эгер C++ объектинин куруучусунда чыгуу болсо, ошол объекттин деструктору чакырылбайт, анткени объект толук түзүлгөн деп эсептелет.
Бирок, объекттин мүчөлөрүнүн жана негизги класстарынын деструкторлору, алар ийгиликтүү курулуп, чыгуу пайда болгонго чейин түзүлгөн болсо, ресурстарды туура бошотуу үчүн чакырылат.
Мисал:
class A {
public:
A() { throw std::runtime_error("Куруучу ката" ); }
~A() { std::cout << "A деструктору" << std::endl; }
};
class B {
A a;
public:
B() { }
~B() { std::cout << "B деструктору" << std::endl; }
};
int main() {
try {
B b; // B() ичинде a түзүлүп жатканда чыгуу болот
} catch (...) {
std::cout << "Чыгуу кармалды" << std::endl;
}
}
Бул мисалда, Bнин деструктору чакырылбайт, анткени B объектиси толук түзүлгөн эмес, бирок Aнын деструктору чакырылат, эгер A ийгиликтүү түзүлүп калса, чыгуу пайда болгонго чейин.