cuốn sách gpt4 ai đã làm

c++ - Tránh std::bad_alloc. mới sẽ trả về một con trỏ NULL

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 23:07:50 27 4
mua khóa gpt4 Nike

Tôi đang chuyển một ứng dụng cỡ trung bình từ C sang C++. Nó không xử lý các trường hợp ngoại lệ ở bất cứ đâu và điều đó sẽ không thay đổi.

Sự hiểu biết (sai!) của tôi về C++ (cho đến khi tôi học nó một cách khó khăn ngày hôm qua) là toán tử new (mặc định) trả về một con trỏ NULL khi có vấn đề phân bổ. Tuy nhiên, điều này đã không xảy ra cho đến năm 1993 (hoặc lâu hơn). Bây giờ, nó ném ra một ngoại lệ std::bad_alloc.

Có thể quay lại hành vi cũ mà không cần viết lại mọi thứ để sử dụng std::nothrow trong mỗi cuộc gọi không?

câu trả lời hay nhất

Bạn có thể quá tải toán tử mới:

#include 

void *operator new(size_t pAmount) // ném (std::bad_alloc)
{
// chỉ chuyển tiếp tới phiên bản không ném mặc định.
return ::operator new(pAmount, std::nothrow);
}

int main(void)
{
vùng chứa typedef std::vector;

thùng chứa v;
v.reserve(v.max_size()); // sẽ thất bại
}

Về C++ - tránh std::bad_alloc. new sẽ trả về một con trỏ NULL, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/1706776/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress