Βίντεο: 1 Εισαγωγή στον αντικειμενοστρεφή τρόπο σκέψης 2024
Μια συνάρτηση C ++ που κατανέμει τους πόρους τοπικά ίσως χρειαστεί να πιάσει μια εξαίρεση, να κάνει κάποια επεξεργασία και στη συνέχεια να την ανακινήσει στην αλυσίδα της στοίβας. Εξετάστε το ακόλουθο παράδειγμα:
void fileFunc () {ofstream * pOut = new outstream ("Αρχείο. Txt"); otherFunction (); διαγράψτε pOut?}
Όπως γνωρίζουν πολλοί προγραμματιστές, η μνήμη που διατίθεται από τη νέα δεν επιστρέφει στον σωρό αυτόματα. Εάν το otherFunction () έπρεπε να ρίξει μια εξαίρεση, ο έλεγχος θα εξέλθει από το πρόγραμμα χωρίς να ζητήσει διαγραφή, και η μνήμη που αντιστοιχεί στην αρχή του fileFunc () θα χαθεί.
void fileFunc () {ofstream * pOut = newstream ("File txt") · δοκιμάστε {otherFunction (); διαγραφή pOut;} αλίευση (…) {delete pOut; throw}}}Μέσα σε αυτή τη φράση, το fileFunc () επιστρέφει τη μνήμη που είχε διατεθεί νωρίτερα στον σωρό. Ωστόσο, δεν είναι σε θέση να επεξεργαστεί το υπόλοιπο της εξαίρεσης επειδή δεν έχει ιδέα τι θα μπορούσε να πάει στραβά. Δεν γνωρίζει καν το είδος του αντικειμένου που μόλις αλιεύθηκε.