我有一个用例,我想使用新的展示位置,但也要确保不会抛出新操作。
我想我想要类似下面的内容(请注意,它不会编译),但是我不确定该怎么做。
char buf1[100];
Foo* foo = new (std::nothrow) (buf1) Foo(100);
答案 0 :(得分:3)
在展示位置新表达式中无需使用std::nothrow
。与new
/ new[]
不同,放置new
/ new[]
已被定义为noexcept
。
[[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>