Video: Bài 15: Xử lý ngoại lệ (Exception) 2025
Một chức năng C ++ phân bổ các tài nguyên cục bộ có thể cần phải nắm bắt một ngoại lệ, làm một số việc xử lý, và sau đó rethrow nó lên các chuỗi ngăn xếp. Hãy xem xét ví dụ sau:
void fileFunc () {ofstream * pOut = new ofstream ("File.txt"); otherFunction (); delete pOut;}
Như nhiều người lập trình biết, bộ nhớ được cấp phát bởi cái mới không được trả về heap một cách tự động. Nếu khácFunction () là ném một ngoại lệ, kiểm soát sẽ thoát khỏi chương trình mà không cần gọi xóa, và bộ nhớ được phân bổ vào đầu fileFunc () sẽ bị mất.
void fileFunc () {ofstream * pOut = new ofstream ("File.txt"); thử {otherFunction (); delete pOut;} catch (…) {delete pOut; throw;}}Trong câu này, fileFunc () trả về bộ nhớ mà nó được phân bổ trước đó cho heap. Tuy nhiên, nó không phải là ở một vị trí để xử lý phần còn lại của ngoại lệ bởi vì nó không có ý tưởng những gì có thể đã đi sai. Nó thậm chí không biết loại đối tượng nó chỉ cần đánh bắt.