【问题标题】:Is constructor called if nothrow new return nullptr?如果 nothrow new 返回 nullptr,是否调用构造函数?
【发布时间】:2021-04-26 12:22:08
【问题描述】:

如果我使用new 并得到std::bad_alloc 编译器不要因为异常调用构造函数。但是它如何与nothrow new 一起工作,因为我们在每种情况下都会得到指针?这种情况的标准中是否有特殊段落?

【问题讨论】:

  • 它只是返回nullptr,显然没有创建对象。
  • 如果没有存放对象的存储区域,在物理上是不可能调用构造函数的。
  • "...5-8) 非空指针,指向至少大小适当对齐的内存,或分配失败时的空指针..." en.cppreference.com/w/cpp/memory/new/operator_new
  • new 做了两件事,调用malloc 来“取代”然后在那个地方构造对象,如果第一个已经失败,则没有选择/理由去做其次,不会调用构造函数。

标签: c++ pointers exception new-operator nothrow


【解决方案1】:

[expr.new]/16 ...如果分配函数返回null,则不进行初始化,不调用释放函数,new的值-表达式 应为空。

【讨论】:

    猜你喜欢
    • 2015-01-14
    • 2021-06-29
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 2013-10-22
    • 2017-07-29
    • 1970-01-01
    • 2012-10-18
    相关资源
    最近更新 更多