Cách thông thường để ném và bắt các ngoại lệ là ném một đối tượng ngoại lệ và bắt nó bằng tham chiếu (thường là const
tham chiếu). Ngôn ngữ C ++ yêu cầu trình biên dịch tạo ra mã thích hợp để xây dựng đối tượng ngoại lệ và dọn dẹp nó đúng cách vào thời điểm thích hợp.
Ném một con trỏ đến một đối tượng được cấp phát động không bao giờ là một ý kiến hay. Các ngoại lệ được cho là cho phép bạn viết mã mạnh mẽ hơn khi đối mặt với các điều kiện lỗi. Nếu bạn ném một đối tượng ngoại lệ theo cách thông thường, bạn có thể chắc chắn rằng liệu nó có bị bắt bởi mệnh đề catch đặt tên đúng kiểu hay không, bởi a catch (...)
, liệu nó có được ném lại hay không, nó sẽ bị hủy đúng vào thời điểm thích hợp. (Trường hợp ngoại lệ duy nhất nếu nó không bao giờ bị bắt nhưng đây là một tình huống không thể khôi phục được cho dù bạn nhìn nó theo cách nào.)
Nếu bạn ném một con trỏ đến một đối tượng được cấp phát động, bạn phải chắc chắn rằng bất kỳ thứ gì ngăn xếp cuộc gọi trông như thế nào tại điểm bạn muốn ném ngoại lệ của mình, đều có một khối bắt tên đúng loại con trỏ và có lệnh delete
gọi thích hợp . Ngoại lệ của bạn không bao giờ được bắt catch (...)
trừ khi khối đó ném lại ngoại lệ mà sau đó bị chặn bởi một khối bắt khác xử lý đúng với ngoại lệ.
Một cách hiệu quả, điều này có nghĩa là bạn đã sử dụng tính năng xử lý ngoại lệ giúp viết mã mạnh mẽ dễ dàng hơn và rất khó để viết mã đúng trong mọi tình huống. Điều này loại bỏ vấn đề rằng hầu như không thể hoạt động như mã thư viện cho mã khách hàng sẽ không mong đợi tính năng này.
throw gcnew
sẽ hữu ích, ví dụ. nếu bạn muốn mã được quản lý để bắt ngoại lệ của bạn. Ai đó có thể sửa cho tôi về điều đó?