Junior — Middle
Kuidas käsitletakse erandeid konstruktoris ja millised on selle protsessi omadused?
sobes.tech AI
Vastus AI-lt
C++-s, erandite, mis visatakse konstruktoris, töödeldakse eriliselt. Kui konstruktoris tekib erand, loetakse objekt mitte looduks ning selle destruktorit ei kutsuta.
Omadused:
- Konstruktoris visatud erand edastatakse kutsunud koodile.
- Osaliselt initsialiseeritud objekti liikmed, mis on juba loodud, hävitatakse õigesti (nende destruktorid kutsutakse).
- Objekti enda destruktorit ei kutsuta, kuna objekt ei loeta täielikult looduks.
Näide:
class MyClass {
public:
MyClass() {
// Kui siin visatakse erand
throw std::runtime_error("Viga konstruktoris");
}
~MyClass() {
// Seda destruktorit ei kutsuta, kui konstruktoris visatakse erand
}
};
int main() {
try {
MyClass obj;
} catch (const std::exception& e) {
std::cout << "Tabatud erand: " << e.what() << std::endl;
}
}
Seega on oluline meeles pidada, et konstruktoris visatud erandiga ei loodud objekti ning selliseid olukordi tuleb õigesti käsitleda.