返回值NEW

时间:2010-10-07 08:42:09

标签: c++

在某些情况下NEW可能会返回一些值,例如NULL,或者它总会引发异常?

5 个答案:

答案 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)