Video: Will New Technology Replace Jobs and Result in Greater Economic Freedom? 2024
Fungsi C ++ yang mengalokasikan sumber daya secara lokal mungkin perlu menangkap pengecualian, melakukan beberapa pemrosesan, dan kemudian mengembalikannya ke rantai tumpukan. Perhatikan contoh berikut:
void fileFunc () {ofstream * pOut = new ofstream ("File. Txt"); otherFunction (); Hapus pOut;}
Seperti yang diketahui banyak programmer, memori yang dialokasikan oleh yang baru tidak dikembalikan ke tumpukan secara otomatis. Jika otherFunction () melempar pengecualian, kontrol akan keluar dari program tanpa meminta delete, dan memori yang dialokasikan pada awal fileFunc () akan hilang.
Untuk menghindari masalah ini, fileFunc () dapat menyertakan tangkapan (…) untuk menangkap pengecualian yang dilemparkan:
void fileFunc () {ofstream * pOut = new ofstream ("File.txt"); coba {otherFunction (); hapus pOut;} catch (…) {delete pOut; throw;}}
Dalam frasa ini, fileFunc () mengembalikan memori yang telah dialokasikan sebelumnya ke heap. Namun, tidak dalam posisi memproses sisa pengecualian karena tidak tahu apa yang salah. Bahkan tidak tahu jenis benda apa yang baru saja tertangkap.
Kata kunci lemparan tanpa argumen rethrows objek pengecualian saat ini mengembalikan rantai ke beberapa fungsi yang dapat memproses kesalahan dengan benar.