Sobes.tech
Junior — Middle

Ako sa spracovávajú výnimky vo vnútri konštruktora a aké sú vlastnosti tohto procesu?

sobes.tech AI

Odpoveď od AI

V C++ sú výnimky, ktoré sú vyhodené vo vnútri konštruktora, spracovávané špeciálnym spôsobom. Ak v konštruktore dôjde k výnimke, objekt sa považuje za nevytvorený a jeho destruktor sa nevolá.

Vlastnosti:

  • Výnimka vyhodená v konštruktore sa prenáša na volajúci kód.
  • Členovia objektu, ktorí už boli vytvorení a sú čiastočne inicializovaní, budú správne zničení (ich destruktory budú volané).
  • Destruktor samotného objektu sa nevolá, pretože objekt sa nepovažuje za úplne vytvorený.

Príklad:

class MyClass {
public:
    MyClass() {
        // Ak je tu vyhodená výnimka
        throw std::runtime_error("Chyba v konštruktore");
    }
    ~MyClass() {
        // Tento destruktor nebude volaný, ak je vo vnútri konštruktora vyhodená výnimka
    }
};

int main() {
    try {
        MyClass obj;
    } catch (const std::exception& e) {
        std::cout << "Zachytená výnimka: " << e.what() << std::endl;
    }
}

Preto je dôležité si uvedomiť, že pri vyhodení výnimky v konštruktore sa objekt nevytvorí a takéto situácie je potrebné správne spracovať.