std :: abort dan std :: exit (dan lainnya: std :: _ Exit, std :: quick_exit) hanyalah fungsi tingkat yang lebih rendah. Anda menggunakannya untuk memberi tahu program apa yang Anda ingin lakukan dengan tepat: destruktor apa (dan jika) harus dipanggil, fungsi pembersihan apa yang dipanggil, nilai apa yang dikembalikan, dll.
std :: terminate adalah abstraksi tingkat yang lebih tinggi: ini dipanggil (oleh run-time atau Anda) untuk menunjukkan bahwa kesalahan dalam program telah terjadi dan karena alasan tertentu tidak mungkin ditangani dengan melemparkan pengecualian. Keharusan untuk itu biasanya terjadi ketika kesalahan terjadi dalam mekanisme pengecualian itu sendiri, tetapi Anda dapat menggunakannya kapan saja ketika Anda tidak ingin program Anda melanjutkan melewati kesalahan yang diberikan. Saya mengumpulkan daftar lengkap situasi ketika std :: terminate dipanggil di posting saya. Tidak ditentukan apa yang dilakukan std :: terminate, karena Anda yang mengontrolnya. Anda dapat mengonfigurasi perilaku dengan mendaftarkan fungsi apa pun. Batasan yang Anda miliki adalah bahwa fungsi tersebut tidak dapat kembali ke situs kesalahan dan tidak dapat keluar melalui pengecualian, tetapi secara teknis Anda bahkan dapat memulai pompa pesan Anda di dalam. Untuk daftar hal-hal berguna yang dapat Anda lakukan di dalam, lihat posting saya yang lain .
Secara khusus, perhatikan bahwa std :: terminate dianggap sebagai penangan pengecualian dalam konteks di mana std :: terminate dipanggil karena pengecualian yang dilemparkan yang tidak dapat ditangani, dan Anda dapat memeriksa apa pengecualian itu dan memeriksanya dengan menggunakan C ++ 11 menggunakan std :: rethrow_exception dan std :: current_exception. Semuanya ada di postingan saya .