C ++,新的vs malloc返回值

问题描述 投票:1回答:3

[当我学习C99时,我被告知要始终检查malloc的返回值以检查它是成功还是失败,但是现在我开始学习C ++,并被告知没有必要为此,您可以使用关键字new,并且可以假设它始终对您有效。

但是为什么呢?

c++ malloc new-operator
3个回答
1
投票

答案是malloc是库函数,而new是C ++运算符。 New分配内存并调用构造函数进行对象初始化:如果失败,则抛出异常std::bad_allocmalloc()分配内存,不调用构造函数,如果失败则返回null


0
投票

new仍然可能失败并引发异常,并且您的程序需要检查是否没有异常。还有一个标志可以传递给new以使其像malloc一样工作,并在错误时返回NULL。看一下文档[1]。

[1] http://www.cplusplus.com/reference/new/operator%20new/


-2
投票

有很多方法可以检查返回值,

  • 您可以检查返回的指针
  • 您可以在更高级别上使用try块
  • 您可以使用set_new_handler来检查是否处理所有新商品。

我更喜欢第二和第三。

© www.soinside.com 2019 - 2024. All rights reserved.