2016-11-17 14 views
8

Tôi đang làm các bài tập từ ngôn ngữ lập trình C++ của Stroustrup. Một trong các nhiệm vụ được xây dựng như sau:Những nhược điểm của việc có một lớp cơ sở cho tất cả các trường hợp ngoại lệ là gì?

Cân nhắc sử dụng một lớp Ngoại lệ làm cơ sở của tất cả các lớp được sử dụng làm ngoại lệ. Nó nên trông giống cái gì? Làm thế nào nó nên được sử dụng? Những gì tốt nó có thể làm gì? Những nhược điểm nào có thể xảy ra do yêu cầu sử dụng một lớp học như vậy?

Câu trả lời có vẻ khá giống như std::exception, tiết kiệm cho các phần nhược điểm - là người duy nhất tôi có thể tưởng tượng là chi phí của __vptr mà thường được coi là không đáng kể. Tôi đang thiếu gì ở đây?

+1

Đây là câu hỏi dựa trên ý kiến ​​và phụ thuộc vào cách bạn xem cách sử dụng ngoại lệ. Những bất lợi mà ông đã nghĩ đến khi ông viết này có lẽ là nó cho phép người tiêu dùng để viết catch-tất cả các mã mà không thực sự giải quyết các trường hợp đặc biệt. –

Trả lời

1

Bất lợi là nếu bạn cố gắng nắm bắt một ngoại lệ ở dưới cùng của cây thừa kế, bạn sẽ bắt được tất cả ngoại lệ bắt nguồn từ cái đó, và một số có thể chỉ ra những thứ rất khác với những gì bạn mong đợi. Thậm chí tệ hơn, một nhà phát triển đã sử dụng rất nhiều chức năng có thể ném ngoại lệ, và không biết ý nghĩa của một số, có thể chỉ cần nắm bắt lớp cơ sở, Ngoại lệ và trả về một trường hợp Ngoại lệ không xác định khi gặp phải lỗi , làm cho nó khó khăn để gỡ lỗi mã, và có thể gây ra toàn bộ chương trình thất bại chỉ vì một ngoại lệ dễ dàng sửa chữa mà không nên gây ra bất kỳ vấn đề.

Các vấn đề liên quan