Video: Como Calcular si un Año es Bisiesto o No en C++ - Ejercicios Resueltos 16 2024
Fungsi C ++ yang memperuntukkan sumber secara tempatan mungkin memerlukan pengecualian, melakukan beberapa pemprosesan, dan kemudian mengembalikan rantai tindanan tersebut. Pertimbangkan contoh berikut:
void fileFunc () {ofstream * pOut = newstream ("File. Txt"); lainFunction (); padam pOut;}
Seperti banyak pengaturcara, memori yang diperuntukkan oleh baru tidak dikembalikan ke timbunan secara automatik. Sekiranya anotherFunction () akan membuang pengecualian, kawalan akan keluar dari program tanpa menggunakan delete, dan memori yang diperuntukkan pada awal failFunc () akan hilang.
Untuk mengelakkan masalah ini, failFunc () boleh memasukkan tangkapan (…) untuk menangkap sebarang pengecualian yang dibuang:
void fileFunc () {arus * pOut = newstream ("); cuba {otherFunction (); hapus pOut;} tangkapan (…) {delete pOut; membuang;}}
Dalam frasa ini, fileFunc () mengembalikan memori yang diperuntukkan sebelum ini kepada timbunan. Walau bagaimanapun, ia tidak berada dalam kedudukan untuk memproses baki pengecualian itu kerana ia tidak tahu apa yang boleh berlaku. Ia tidak tahu apa jenis objek yang ditangkap sahaja.
Kata kunci lemparan tanpa sebarang argumen mengembalikan objek pengecualian semasa menyandarkan rantai kepada beberapa fungsi yang boleh memproses ralat dengan betul.