c++ - 将构造函数指定为 noexcept 是否会隐式导致在 C++ 中使用 new 运算符的 nothrow 版本?

标签 c++ exception constructor noexcept nothrow

如果我将构造函数指定为 noexcept,则动态实例化对象时是否会隐式使用 new 运算符的 nothrow 版本?

例如:

class Something {
public:
  Something() noexcept;
};

...

Something *s = new Something;  // <- compiler interprets as "std::nothrow"

我知道使用 noexcept 的实际结果是在函数执行期间抛出的任何异常都会导致 std::terminate,我只是不知道是否编译器推断使用 nothrow 进行构造。我的直觉说“不”,分配期间出现问题将导致抛出 std::bad_alloc ,从而导致 std::terminate

最佳答案

std::bad_alloc异常(exception)是内存分配,而不是对象的初始化或构造。

所以回答你的问题:不,编译器不会将其视为无抛出new

关于c++ - 将构造函数指定为 noexcept 是否会隐式导致在 C++ 中使用 new 运算符的 nothrow 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75591519/

相关文章:

使用条件变量的 C++ 监视器类/包装器

java - Hibernate 和 Apache Tomcat 的问题

php - 如何在 PHP 的构造函数中初始化变量

kotlin - 如果我不希望Kotlin中派生类调用基类的构造函数,该怎么办?

java - 为什么我的代码在检查两个相等的字符串时返回 false?

c++ - 在 C++ 中覆盖 OpenGL 的纹理包装器

c++ - 无法分配给这个 : lvalue required as left operand of assignment

c++ - 为什么我们需要将函数标记为constexpr?

C++:指示一个函数可能会抛出

delphi - CheckException仅接受0参数方法;如何测试其他方法是否抛出异常?