如果我将构造函数指定为 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/