问题标签 [nothrow]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
9528 浏览

c++ - 什么时候应该使用 std::nothrow?

的理想用法是std::nothrow什么?

0 投票
3 回答
2643 浏览

c++ - 带有 nothrow 选项的运算符 new 仍然抛出异常

有这样的代码:

然而,这个程序仍然抛出 std::bac_alloc 异常,尽管 new 是用 std::nothrow 参数调用的。这个程序是用Visual C++ 2010编译的,为什么会抛出异常?

编辑:

在 mingw 的 Windows 上使用 g++,一切正常。

0 投票
2 回答
2706 浏览

c++ - 标准头文件中 std::nothrow 和 std::new_handler 的用途是什么

我遇到了一个小的标准头文件<new>。我以前可能没有见过它的直接用途。这里是g++ 版本,供有兴趣的人使用。

以下部分是我感兴趣的:

  1. 程序员如何使用struct nothrow_t它及其对象?nothrow对象真的需要extern吗?
  2. 什么时候new_handler用?
  3. 为什么所有的operator new/delete都在extern C++块中声明?
0 投票
3 回答
815 浏览

c++ - C++:内存不足时应该返回什么?

当我编写如下代码时,它将返回“null”并且没有发生异常。

在 new 运算符上不使用“nothrow”参数怎么样?它是否也返回'null'?如果是这样,为什么建议使用“nothrow”参数?

谢谢你的时间。

0 投票
3 回答
2930 浏览

c++ - std::string 的默认构造函数是不抛出的吗?

可以 std::string s; 在任何情况下抛出?这是否受标准规范(对 C++03 感兴趣,以防有差异)?

0 投票
2 回答
131 浏览

d - 在 D 中构建字符串的首选方式

关于函数属性以及父函数的编译@safe时和运行时性能,构造字符串的首选方法是什么?purenothrow

例如,我们是否应该使用

或者

我认为该format版本在视觉上更容易,但在其他方面更好吗?

由于格式字符串及其参数必须是 CTFEed,因此编译时间可能会对性能产生轻微影响,对吗?

0 投票
1 回答
483 浏览

c++ - (std::no throw) 分配失败时崩溃

我有一个自定义内存分配器,写了类似的东西

由于标准说我不应该抛出异常,所以我不检查分配是否成功。现在我正在模拟 Allocator 对象,以便 malloc 函数调用返回 NULL。我正在使用这个运算符,如下所示:

它在这里崩溃,gdb 的 bt 显示类似这样的内容。这个指针突然变为 0x0。任何人都可以解释我..!如果是这种情况,我该如何在我的代码中处理这种情况。

0 投票
2 回答
3368 浏览

c++ - 如何结合 std::make_shared 和 new(std::nothrow)

C++ 的 new 可以选择在分配失败时返回空指针,而不是抛出 bad_alloc 异常。

(是的,我知道这只会阻止 new 抛出 bad_alloc;它不会阻止 Foo 的构造函数抛出异常。)

如果你想使用共享指针而不是原始指针,你通常应该使用 make_shared,因为它对控制块的分配很聪明。

make_shared 封装了新的,这使得(?)无法选择 nothrow 版本。因此,您似乎必须放弃 make_shared 并明确调用 new 。

这消除了使用 Foo 分配控制块的优化,并且控制块分配可能会独立于 Foo 分配而失败,但我不想关注这一点。让我们假设控制块很小,因此它的分配在实践中永远不会失败。我担心的是未能为 Foo 分配空间。

有没有办法获得 make_shared 的单一分配优势,同时在为 Foo 分配空间时保留简单地获取空指针而不是 bad_alloc 异常的能力?

0 投票
4 回答
2337 浏览

c++ - 安置新的和例外

“placement new”运算符声明如下:

但是虽然它不涉及任何实际分配,因此消除了错误的分配异常,但指针仍然有可能指向错误的位置,在这种情况下,人们会期望得到范围或上溢/下溢错误,但不会它被声明为noexcept简单地终止执行的事实吗?

这是否也意味着在 C++11 放置之前 new 将抛出并尝试处理std::unexpected以防万一std::set_unexpected而不是直接崩溃?

难道不应该“以防万一”放置新的超载吗?

0 投票
2 回答
2892 浏览

c++ - 如何使用 new(std::nothrow) 使构造函数失败?

考虑以下代码:

这会产生以下输出:

如您所见,尽管分配 Foo 失败,但分配第一个 Bar 成功。Bar 的第二次分配和 Baz 的分配通过使用 std::bad_alloc 正确失败。

现在我的问题是:如何制作“new(std::nothrow) Bar(std::nothrow_t());” 当 Foo 分配失败时释放 Bar 的内存并返回 NULL?依赖倒置是唯一的解决方案吗?