Bạn nên sử dụng khối try
/catch
.
Khi những người khác đã trả lời, __try
/__except
là để bắt SEH (lỗi do cửa sổ tạo ra) không phải để bắt ngoại lệ chung.
Quan trọng nhất, __try
và __catch
không được chạy trình phá hủy C++ hoặc giải phóng chính xác ngăn xếp khi ngoại lệ được ném.
Trừ trường hợp hiếm hoi, bạn không bao giờ nên cố gắng nắm bắt các ngoại lệ SEH.
EDIT: Vâng, tôi đã tích cực về điều này (đó là những gì tôi đã luôn luôn nói), nhưng @Hans nói rằng dường như có một trình chuyển đổi trình biên dịch bạn có thể sử dụng để thay đổi điều này. Tôi nghĩ rằng các tài liệu trên /EHa
gây hiểu lầm hoặc ít nhất là không đầy đủ, về những gì xảy ra ở đây. Nếu ai đó tìm thấy tài liệu dứt khoát chứng minh điều này sai, tôi sẽ vui lòng xóa câu trả lời này.
Thậm chí nếu hóa ra điều này là sai, bạn vẫn nên sử dụng try
và catch
đơn giản vì chúng là tiêu chuẩn, trong khi __try
và __except
thì không.
Nguồn
2010-09-16 20:56:44
Vì vậy, nó không thư giãn ngăn xếp? Điều đó có nghĩa rằng có thể là một ý tưởng tồi khi sử dụng '__try' /' __except' như một hệ thống báo cáo sự cố, trong khi nó có thể phục hồi từ một ngoại lệ trong khối 'try' /' catch'. –
@David: Đúng vậy. '__try' và' __except' là đúng API dựa trên C/ABI. –
Chỉ sử dụng tốt cho nó tôi đã nhìn thấy đã được đối phó với những gì lên đến lỗi trong Windows chính nó (chẳng hạn như những gì được sử dụng để xảy ra khi bạn cố gắng để sao chép một thiết bị). Có thể cho rằng chúng luôn là dấu hiệu của một nơi nào đó mà Windows đã bắt được ngoại lệ cho bạn và dịch nó thành một lỗi. (Cách họ làm việc rất khủng khiếp, và rất đặc biệt x86 ...) –