关于new、delete函数的错误处理(std::nothrow)

new、delete函数源码注释如下:
image

无参数

无参数的new、delete函数,如果调用失败,会抛出bad_alloc异常,需要使用try{}catch(){}语句捕获异常从而进行异常处理。

#include <iostream>

int main()
{
    try {
        while (1)
        {
            int *p = new int[100000000ul];
        }
    } catch (std::bad_alloc& e) {
        std::cout << e.what() << std::endl;
    }

    return 0;
}

带参数

带参数的new、delete函数可以传入std::nothrow参数,那么new、delete的行为和C语言的malloc、free函数行为一致,分配空间失败时会返回空指针,可通过指针判空进行错误处理。

#include <iostream>

int main()
{

    while (1)
    {
        int *p = new(std::nothrow) int[100000000ul];
        if (!p)
        {
            std::cout << "分配空间失败!" << std::endl;
            break;
        }
    }


    return 0;
}
posted @ 2024-07-30 23:48  今天你自律了没  阅读(87)  评论(0)    收藏  举报