问题标签 [exception-safety]
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.
kotlin - 为什么 kotlin 提供空安全运算符而不提供异常安全运算符?
如果 kotlin 提倡安全代码,例如:
为什么没有类似的异常处理语法,例如使用虚??.
运算符:
我没有看到这里的缺点。有什么理由这不是语言的一部分吗?
c++ - 分配器构造和销毁成员函数是否允许从内部逻辑抛出异常?
我正在编写自己的容器,该容器不需要可移动和可复制的类型。我认为在异常安全方面我可以稍微简化逻辑。但是我注意到分配器construct
的destroy
成员函数没有关于何时可以和不能抛出异常的措辞。
我很确定我以前读过这些措辞。否则,即使我的类型不可移动,construct
当我调整缓冲区大小以增加容量时,仍然可以从用户提供的分配器中抛出异常。这需要复杂的回滚代码来保证我真正想跳过的强大的异常安全性。
是否有一种措辞只允许从调用 ctor/dtor 时抛出异常,或者分配器是否总是需要复杂的机制来维护异常安全?
c++ - 私有函数成员应该是异常安全的吗?
在编写异常安全代码时,所有私有成员函数是否应该至少保证基本的异常安全?在这种情况下,最佳/最佳做法是什么?备择方案?
例如,假设我有一个Foo
带有public
function member的类DoSomething
,它调用private
function member DoSomeOfIt
。DoSomeOfIt
可能由于某些我无法影响的功能而失败,并且当它发生时,它可能会使Foo
对象处于部分修改状态,这违反了Foo
的不变量。所以我可以包装DoSomeOfIt
在一个块中并调用块中的try-catch
另一个private
函数成员来撤消所做的事情。单独地,可能不是异常安全的,但确实如此。那会是异常安全代码吗?(在这种情况下有强有力的保证)UndoThat
catch
DoSomeOfIt
DoSomeOfIt
UndoThat
DoSomething
当然,我可以简单地包含DoSomeOfIt
和UndoThat
in的代码DoSomething
,但这可能会导致代码膨胀和函数体过长,而分解函数会使任务模块化并可能使代码更具可读性(?)
免责声明:我理解这可能是基于意见的。我不确定这是否会使这篇文章变得糟糕,但我会很感激任何意见或经验,这会导致问题,或者是常见的做法等。
c++ - 复合模式中的异常安全
我使用复合模式来表示设备,我想在关闭它们的电源(调用它们的 dtor)之前关闭它们。我在尝试对设备进行分组时遇到了问题,尤其是关于它们的状态。
在以下情况下我将如何进行:
工作站可能包含多个设备,您需要在停止工作站电力之前安全地关闭所有设备。(在这个比喻中,我很便宜)。还值得注意的是,我永远不会希望任何一个设备自行打开 - 一切都将始终作为一个单元。
当其中一个内部设备不想安全关闭时,问题就出现了——它会抛出异常(例如,计算机的程序阻止它关闭)。
is_on() 在那种状态下应该返回什么?连续的方法调用应该做什么?或者,我可以使用另一种设计模式来更好地表示我的问题吗?
c++ - Effective Modern C++ 中的这个项目仍然是最新的吗?
有效的现代 C++ 第 146 页:
这是 C++17 之前的不安全调用:
它曾经是不安全的,因为可以在构造函数之后new Widget
但之前调用computePriority std::share_ptr
,如果computePriority
产生异常,动态的allcoat Widget 将被泄露。因此你可以这样做:
现在这将在 shared_ptr 上添加一个复制构造函数操作。所以你也可以这样做:
所以我的问题是,以下代码是否仍然能够在 C++17 中泄漏内存?
我已经阅读了这个和这个,但我仍然不确定,我相信std::shared_ptr<Wdiget>(new Widget, cusDel)
并且computePriority()
都在调用 processWidget 之前排序,但是我认为在获得新创建的对象的所有权之后和之前computePriority()
仍然可以抛出异常。new
shared_ptr
rust - 如果 Drop 出现恐慌,我可以(并且应该)做什么?无论如何我可以释放其他资源吗?
我有一个简单的资源,它使用MaybeUninit
并unsafe
出于外部原因:
我想,如果T::drop()
惊慌失措,RefMut
就会泄漏,毒化它RefCell
。我怎样才能防止这种情况发生,这样做会不会是惯用的?该文档指出:
鉴于 a
panic!
将在展开时调用drop
,因此实现中的任何panic!
一个drop
都可能中止。
但是这个“可能”并没有足够清楚地说明我是否应该期待(并且可以处理)这种情况。
android - 在 Kotlin 中处理异常的正确方法是什么?
在 Java 中,Android Studio 会为某些函数提供 Unhandled Exception 错误。例如,当我们编写将 String 转换为 Date 变量的代码时,它显示 Unhandled Exception:ParseException & 按 Alt+Insert 会自动添加 try catch 块 & 我们可以在 catch 块中编写异常条件的代码。但是在 Kotlin 中我没有看到这样的警告。在 Kotlin 中是否有其他处理异常的方法?
c++ - 使用自定义比较器,std::map 异常是否安全?
std::map
如果自定义比较器在重新平衡期间抛出异常怎么办?显然,它应该记住所有先前的回合并将所有内容恢复到原始状态。这是真的吗?