是否可以将std :: nothrow参数用于放置新操作?

时间:2018-11-26 19:45:56

标签: c++ new-operator

我有一个用例,我想使用新的展示位置,但也要确保不会抛出新操作。

我想我想要类似下面的内容(请注意,它不会编译),但是我不确定该怎么做。

char buf1[100];                                                                                                           
Foo* foo = new (std::nothrow) (buf1) Foo(100);

1 个答案:

答案 0 :(得分:3)

在展示位置新表达式中无需使用std::nothrow。与new / new[]不同,放置new / new[]已被定义为noexcept

[new.delete.placement]

[[nodiscard]] void* operator new(std::size_t size, void* ptr) noexcept;
[[nodiscard]] void* operator new[](std::size_t size, void* ptr) noexcept;

如果您查看[new.delete.single][new.delete.array],将会发现该展示位置版本将调用std::nothrow / new的相应new[]版本。 / p>