2013-04-11 41 views
10

Khi thoát (0) được sử dụng để thoát khỏi chương trình, các bộ hủy đối với địa phương phạm vi đối tượng không tĩnh không được gọi. Nhưng destructors là được gọi là nếu trả về 0 được sử dụng.Lưu ý rằng các đối tượng tĩnh sẽ được làm sạch ngay cả khi chúng tôi gọi exit().exit (0) vs return 0

Sẽ có một số lý do đằng sau logic này. tôi chỉ muốn biết nó là gì? Cảm ơn bạn.

+0

Đó không phải là câu hỏi giống như câu hỏi được trích dẫn ở trên. Anh ấy có vẻ quen thuộc với câu trả lời cho câu hỏi được trích dẫn ('exit' không gọi là destructors địa phương. Anh ta hỏi tại sao. –

+0

@JamesKanze Ok. Chúng ta đã quá nhanh về vấn đề này. Bỏ phiếu để mở lại câu hỏi, xóa bỏ câu hỏi. – Jean

+0

Mặc dù câu trả lời được chấp nhận trong câu hỏi được liên kết đưa ra gợi ý ("exit() không trả về") với lý do, tôi đồng ý rằng đó chắc chắn không phải là một bản sao. – Damon

Trả lời

8

Trong trường hợp exit(0), bạn đang gọi một hàm. Bạn không mong đợi các destructors của các biến địa phương được gọi nếu bạn đang gọi một hàm. Và trình biên dịch không biết, một ưu tiên, rằng có bất kỳ điều gì đặc biệt về exit(0).

Thực tế, lý do này thực sự chỉ áp dụng cho C++ trước ngoại lệ. Tiêu chuẩn có thể xác định lại exit() để ném một ngoại lệ được xác định thực hiện được xác định với đối số và chỉ định rằng lệnh gọi tới main được bao bọc trong khối thử bắt ngoại lệ này và chuyển mã trả về trở lại hệ thống. Điều này có nghĩa là exit có hoàn toàn khác nhau ngữ nghĩa trong C và trong C++, tuy nhiên; ở bất kỳ mức nào, không có đề xuất nào trước khi ủy ban thực hiện thay đổi này .