Sobes.tech
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.