Tôi đã thực hiện một số nghiên cứu sau khi học new
, không giống như malloc()
mà tôi đã sử dụng, không trả về NULL cho phân bổ không thành công và thấy có hai cách riêng biệt kiểm tra xem liệu mới có thành công hay không. Những hai cách là:Mới (std :: nothrow) so với New trong khối try/catch
try
{
ptr = new int[1024];
}
catch(std::bad_alloc& exc)
{
assert();
};
và
ptr = new (std::nothrow) int[1024];
if(ptr == NULL)
assert();
Tôi tin rằng hai cách đạt được cùng một mục tiêu, (! Đúng cho tôi nếu tôi sai dĩ nhiên), vì vậy câu hỏi của tôi là thế này:
là tùy chọn tốt hơn để kiểm tra xem new
có thành công hay không, hoàn toàn dựa trên khả năng đọc, bảo trì và hiệu suất, trong khi bỏ qua quy ước lập trình C++ không thực tế.
Sử dụng ngoại lệ. Chúng làm cho mã của bạn có ý nghĩa hơn, cục bộ, có thể duy trì và có thể mở rộng. –
Về khả năng đọc chỉ, chắc chắn là không có xử lý ngoại lệ. Về hiệu suất, có thể cũng là 'nothrow'. Nhưng tôi chắc chắn rằng những người vượt trội sẽ tranh cãi. Nhưng nếu bạn chỉ muốn một lỗi xác nhận đơn giản, bạn cũng có thể sử dụng biến thể ném và bỏ qua trình xử lý ngoại lệ;) –
Điểm của mã đó là gì? Bạn đang bắt một ngoại lệ cụ thể, có ý nghĩa và sau đó tạo ra một cái vô nghĩa thông qua 'assert()' ... – Blindy