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

Επομένως, είναι σημαντικό να θυμάστε ότι, όταν ρίχνετε μια εξαίρεση στον κατασκευαστή, το αντικείμενο δεν δημιουργείται και τέτοιες καταστάσεις πρέπει να διαχειρίζονται σωστά.