C++ 11 giới thiệu một cách hoàn thành chương trình mới - std::quick_exit
.Sự khác nhau giữa std :: quick_exit và std :: abort và lý do std :: quick_exit cần thiết là gì?
Trích dẫn các N3242 18,5 (p 461.):
[[noreturn]] void quick_exit(int status) noexcept;
Effects: Chức năng đăng ký bởi các cuộc gọi đến
at_quick_exit
được gọi là theo thứ tự ngược lại đăng ký của họ, ngoại trừ một hàm sẽ được gọi là sau khi bất kỳ chức năng nào đã đăng ký trước đó đã có đã được gọi vào thời điểm được đăng ký. Các đối tượng không được bị hủy do gọi sốquick_exit
. Nếu điều khiển để lại một hàm đã đăng ký được gọi làquick_exit
vì hàm này không cung cấp trình xử lý cho một ngoại lệ được ném, hãy gọiterminate()
. [Lưu ý:at_quick_exit
có thể gọi chức năng đã đăng ký từ một chủ đề khác nhau so với đăng ký nó, vì vậy chức năng đã đăng ký phải không dựa vào danh tính đối tượng có thời lượng lưu trữ luồng. - lưu ý cuối cùng] Sau khi gọi các chức năng đã đăng ký,quick_exit
sẽ gọi_Exit(status)
. [Lưu ý: Bộ đệm tệp chuẩn không bị xóa. Xem: ISO C 7.20.4.4. - cuối note]
Như định nghĩa của std::abort(void)
và std::_Exit(int status)
chỉ khác nhau ở khả năng để vượt qua tình trạng để quá trình cha mẹ, nó làm tăng câu hỏi của tôi.
Liệu nó có nghĩa là sự khác biệt duy trong ngữ nghĩa giữa std::quick_exit
và std::abort
là rằng std::quick_exit
cuộc gọi chức năng đăng ký sử dụng std::at_quick_exit
và cho phép để thiết lập tình trạng trả lại?
Lý do để giới thiệu chức năng này là gì?
Ngoài ra, vì 'abort' signal' SIGABRT', gọi 'abort' sẽ thường dẫn đến kết quả (mặc dù có thể cấu hình được) trong * * core dump ** trên * nix, hoặc trong cửa sổ bật lên trên Windows (ví dụ: _Program đã ngừng hoạt động, Close/Debug_) Chỉ sử dụng 'abort' khi chấm dứt do điều kiện ** không mong muốn ** và bạn muốn một coredump/minidump để ** chẩn đoán lý do ** cho điều kiện bất ngờ. – vladr