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