在某些情况下NEW
可能会返回一些值,例如NULL,或者它总会引发异常?
答案 0 :(得分:3)
char *p = new(std::nothrow) char[1024];
答案 1 :(得分:2)
符合标准的new
表达式永远不会计算为null。
您可以使用std::nothrow
返回null而不是抛出异常:
new (std::nothrow) T();
答案 2 :(得分:1)
http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.6
请记住。在C ++中,如果运行时系统在p = new Fred()期间无法分配sizeof(Fred)字节的内存,则将抛出std :: bad_alloc异常。与malloc()不同,new永远不会返回NULL!
[除非你的编译器“很古老”,在这种情况下该页面也有适合你的解决方案]。
请注意,如果您在编译器选项中禁用了异常,那么您应该检查编译器文档中的内容。
答案 3 :(得分:1)
根据标准,只要new
失败,它就会抛出std::bad_alloc
异常。但是,如果使用new
失败,您可以使std::nothrow
返回NULL。例如:int *p = new(std::nothrow) int;
答案 4 :(得分:0)
new
会抛出(std::bad_alloc
,如果我记得很清楚的话。)
但您可以使用malloc()
更改此行为以模仿NULL
并返回(std::nothrow)
。