Junior — Middle
Hogyan lehet megelőzni a dupla kivételek kialakulását egy programban?
sobes.tech MI
Válasz az MI-től
A kettős kivételek (double exceptions) akkor fordulnak elő, amikor egy kivétel kezelése közben egy másik kivétel kerül elő, ami a program befejezéséhez vagy a std::terminate hívásához vezethet.
Ennek megelőzése érdekében:
- Ne dobjon kivételeket destruktorokból. Ha egy destruktor kivételkezelés közben hívódik meg, egy új kivétel a
std::terminate-hez vezet. - Használjon try-catch blokkokat a destruktorokban, hogy elfogja és kezelje a kivételeket, megakadályozva azok kijutását.
- Kerülje el a kivételek dobását olyan függvényekből, amelyeket kivételkezelők hívnak.
- Használjon
noexcept-et azokhoz a függvényekhez, amelyek nem dobhatnak kivételeket.
Biztonságos destruktor példája:
~MyClass() noexcept {
try {
// kód, amely kivételt dobhat
} catch (...) {
// kivételkezelés, például naplózás
}
}
A kulcs az, hogy elkerüljük a kivételek dobását más kivételek kezelése közben, különösen destruktorokból.