Junior — Middle
Πώς διαχειρίζονται οι εξαιρέσεις μέσα στον κατασκευαστή και ποια είναι τα χαρακτηριστικά αυτής της διαδικασίας;
sobes.tech AI
Απάντηση από AI
Στη C++, οι εξαιρέσεις που ρίχνονται μέσα στον κατασκευαστή (constructor) αντιμετωπίζονται με ειδικό τρόπο. Αν συμβεί μια εξαίρεση στον κατασκευαστή, το αντικείμενο θεωρείται ότι δεν δημιουργήθηκε και ο καταστροφέας (destructor) του δεν καλείται.
Χαρακτηριστικά:
- Η εξαίρεση που ρίχνεται στον κατασκευαστή μεταβιβάζεται στον κώδικα που τον κάλεσε.
- Τα μέλη του αντικειμένου που έχουν ήδη δημιουργηθεί και είναι μερικώς αρχικοποιημένα, θα καταστραφούν σωστά (οι καταστροφείς τους καλούνται).
- Ο καταστροφέας του ίδιου του αντικειμένου δεν καλείται, καθώς το αντικείμενο δεν θεωρείται πλήρως δημιουργημένο.
Παράδειγμα:
class MyClass {
public:
MyClass() {
// Αν ρίξει μια εξαίρεση εδώ
throw std::runtime_error("Σφάλμα στον κατασκευαστή");
}
~MyClass() {
// Αυτός ο καταστροφέας δεν καλείται αν ρίξει εξαίρεση στον κατασκευαστή
}
};
int main() {
try {
MyClass obj;
} catch (const std::exception& e) {
std::cout << "Πιάστηκε εξαίρεση: " << e.what() << std::endl;
}
}
Επομένως, είναι σημαντικό να θυμάστε ότι, όταν ρίχνετε μια εξαίρεση στον κατασκευαστή, το αντικείμενο δεν δημιουργείται και τέτοιες καταστάσεις πρέπει να διαχειρίζονται σωστά.