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ť.