Tôi biết một số trò chơi được viết bằng C ++ nhưng không sử dụng ngoại lệ. Do việc xử lý lỗi cấp phát bộ nhớ trong C ++ thường được xây dựng xung quanh std::bad_alloc
ngoại lệ, làm thế nào để các trò chơi này xử lý một lỗi như vậy?
Có phải họ chỉ đơn giản là gặp sự cố, hoặc có một cách khác để xử lý và phục hồi từ lỗi hết bộ nhớ?
std::terminate
và thay vào đó là chương trình . Nhưng sau đó trong cùng một hạn chế, phân bổ có thể trả về một con trỏ null thay vì ném một ngoại lệ, và kết quả đó có thể được kiểm tra và xử lý riêng.
ClassName variableName = new(nothrow) ClassName();
( rõ ràng thay thế tên lớp, tên biến, v.v. ) Sau đó, nếu phân bổ thất bại, bạn có thể phát hiện nó bằng cách nói if(!variableName)
cho phép xử lý lỗi mà không có khối ngoại lệ thử bắt. Tương tự, nếu bộ nhớ được phân bổ bằng cách sử dụng một chức năng như malloc()
, calloc()
v.v., thì các lỗi không thể phân bổ có thể được phát hiện bằng cách sử dụng cùng một if(!variableName)
phương thức mà không cần thử bắt. Đối với cách các trò chơi xử lý các lỗi này, thì tại thời điểm đó, các nhà phát triển trò chơi phải quyết định xem nó có bị treo hay không.