Junior — Middle
Kaip apdorojamos išimtys konstruktoriaus viduje ir kokios yra šio proceso ypatybės?
sobes.tech AI
Atsakymas iš AI
C++ kalboje išimtis, išmesta konstruktoriaus viduje, yra tvarkoma ypatingu būdu. Jei konstruktoriuje įvyksta išimtis, objektas laikomas nesukurtu, ir jo destruktorius nėra kviečiamas.
Savybės:
- Išimtis, išmesta konstruktoriaus, perduodama kviečiančiam kodui.
- Dalinai inicializuoti objekto nariai, kurie jau buvo sukurti, bus teisingai sunaikinti (jų destruktoriai bus kviečiami).
- Pats objekto destruktorius nėra kviečiamas, nes objektas nelaikomas visiškai sukurtu.
Pavyzdys:
class MyClass {
public:
MyClass() {
// Jei čia išmetama išimtis
throw std::runtime_error("Konstruktoriaus klaida");
}
~MyClass() {
// Šis destruktorius nebus kviečiamas, jei išmetama išimtis konstruktoriuje
}
};
int main() {
try {
MyClass obj;
} catch (const std::exception& e) {
std::cout << "Pagauta išimtis: " << e.what() << std::endl;
}
}
Todėl svarbu atsiminti, kad išmetus išimtį konstruktoriuje, objektas nesukuriamas, ir tokias situacijas reikia tvarkyti tinkamai.