Nếu tôi đang tạo một dự án mới trong C++ không được quản lý, Visual Studio 2008 hoặc cao hơn, tôi muốn sử dụng mô hình xử lý ngoại lệ nào?Visual C++ Mã không được quản lý: Sử dụng/EHa hoặc/EHsc cho ngoại lệ C++?
Tôi hiểu rằng tùy chọn/EHa dẫn đến mã kém hiệu quả hơn và cũng nắm bắt được ngoại lệ SEH, phải không?
Vì vậy, tôi đã được chỉ đạo rõ ràng tùy chọn đó và thường đi với/EHsc, do đó tôi chỉ bắt C++ ngoại lệ thực sự ném và không bắt vi phạm truy cập và execptions có cấu trúc khác, trong catch (...) xử lý. Nếu có một sự vi phạm truy cập trong mã của tôi, tôi không muốn nó bị che bởi một catch (...) {}.
Tôi mã với những người khác muốn bắt (...) {} để không làm gì và thậm chí họ muốn nó làm điều đó nếu có vi phạm truy cập, điều đó có vẻ như là một ý tưởng tồi với tôi. Nếu có lỗi do mã hóa xấu, bạn không muốn dính ngón tay vào tai và lớn tiếng nói "La la la la la!" để bạn không phải bị lỗi chương trình? Trong thực tế, nếu mã đang ở trạng thái xấu vì lỗi mã hóa, bạn có thực sự muốn mã tiếp tục không? Vì vậy, suy nghĩ chung của tôi là/EHa tạo mã lớn hơn/chậm hơn và nó cho phép các lập trình viên lấy đi mã viết rằng nếu có lỗi nghiêm trọng, nó sẽ tiếp tục chạy trong trạng thái không xác định.
BTW, tôi đang nói về các ứng dụng và mã dịch vụ là những gì chúng tôi đang viết cho hầu hết các phần. Không phải trình điều khiển thiết bị cấp thấp hoặc bất cứ thứ gì tương tự.
Hãy cân nhắc suy nghĩ của bạn.
Bạn không bao giờ nên cố gắng bắt vi phạm quyền truy cập trong mọi trường hợp. –
Đó là sự hiểu biết của tôi ... nhưng tôi có người viết bắt (...) {} và nếu/EHa được chọn, thì điều đó sẽ chôn vùi vi phạm truy cập tôi tin. Đó là một điều cần nắm bắt (...) {cleanup_stuff; ném; } nhưng ngay cả trong trường hợp đó, nếu đó là một sự vi phạm truy cập đang bị bắt, bạn có chắc là cleanup_stuff sẽ thực hiện công việc của nó không? Bạn đang ở trong trạng thái xấu, vì vậy tôi có thể nghĩ rằng chương trình là tốt nhất chỉ cần đâm ở đó. – MarkS
Tôi đang làm việc trên một hệ thống máy khách/máy chủ nếu máy chủ có ngoại lệ (lý tưởng, ngoại lệ, bao gồm vi phạm truy cập), tôi muốn gửi thông báo ngoại lệ tới máy khách trước khi cho phép luồng máy chủ bị lỗi. Nếu không, máy chủ chỉ dừng đáp ứng. –