Saya mengetahui beberapa game yang ditulis dalam C ++ tetapi tidak menggunakan pengecualian. Karena penanganan kegagalan alokasi memori di C ++ umumnya dibangun di sekitar std::bad_alloc
pengecualian, bagaimana game-game ini menangani kegagalan seperti itu?
Apakah mereka hanya crash, atau ada cara lain untuk menangani dan pulih dari kesalahan kehabisan memori?
std::terminate
, dan hanya itu. Tetapi kemudian di bawah batasan yang sama, alokasi dapat mengembalikan pointer nol alih-alih melemparkan pengecualian, dan hasilnya dapat diperiksa dan ditangani secara terpisah.
ClassName variableName = new(nothrow) ClassName();
( jelas mengganti nama kelas, nama variabel, dll. ) Kemudian, jika alokasi gagal, Anda bisa mendeteksinya dengan mengatakan if(!variableName)
membiarkan kesalahan ditangani tanpa blok pengecualian coba-tangkap. Demikian juga, jika memori dialokasikan menggunakan fungsi seperti malloc()
,, calloc()
dll., Maka kegagalan untuk mengalokasikan dapat dideteksi menggunakan if(!variableName)
metode yang sama tanpa perlu try-catch. Adapun cara permainan menangani kesalahan ini, baik, pada saat itu, tergantung pada pengembang game untuk memutuskan apakah itu crash atau tidak.